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.
In v 1.5 of magrittr on CRAN you can use the
%$%
operator:It is essentially a wrapper around
with
but nicer thanor
It is designed to be convinient when functions don't have their own data argument, e.g. with plot you can do
but e.g. with
ts.plot
you can't do that, so now:[yeah, I know the example makes no sense, but it illustrates the point]
Note also that
[<-
and[[<-
also have aliases,inset
andinset2
..