How to extract / subset an element from a list with the magrittr %>% pipe?

匿名 (未验证) 提交于 2019-12-03 01:47:02

问题:

Since the introduction of the %>% operator in the magrittr package (and it's use in dplyr), I have started to use this in my own work.

One simple operation has me stumped, however. Specifically, this is the extraction (or subsetting) of elements from a list.

An example: In base R I would use $, [ or [[ to extract an element from a list:

iris$Species iris[["Species"]]

I can achieve the same using the %>% pipe:

iris %>%   subset(select = "Species") %>%   head    Species 1  setosa 2  setosa 3  setosa 4  setosa 5  setosa 6  setosa

Or

iris %>%   `[[`("Species") %>%   levels  [1] "setosa"     "versicolor" "virginica" 

However, this feels like a messy, clunky solution.

Is there a more elegant, canonical way to extract an element from a list using the %>% pipe?

Note: I don't want any solution involving dplyr, for the simple reason that I want the solution to work with any R object, including lists and matrices, not just data frames.

回答1:

In v 1.5 of magrittr on CRAN you can use the %$% operator:

iris %$%    Species %>%   levels

It is essentially a wrapper around with but nicer than

iris %>%    with(Species %>% levels)

or

iris %>%   with(Species) %>%   levels

It is designed to be convinient when functions don't have their own data argument, e.g. with plot you can do

iris %>%    plot(Sepal.Length ~ Sepal.Width, data = .)

but e.g. with ts.plot you can't do that, so now:

iris %$%   ts.plot(Sepal.Length)

[yeah, I know the example makes no sense, but it illustrates the point]

Note also that [<- and [[<- also have aliases, inset and inset2..



回答2:

Use use_series, extract2 and extract for $, [[, [, respectively.

?extract

magrittr provides a series of aliases which can be more pleasant to use when composing chains using the %>% operator."

For your example, you could try

iris %>%   extract("Species")

and

iris %>%   extract2("Species") %>%   levels

See the bottom of this page for more: http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!