not - magritte
¿Cómo extraer/subcontratar un elemento de una lista con magrittr%>% pipe? (2)
En v 1.5 de magrittr en CRAN puede usar el operador %$%
:
iris %$%
Species %>%
levels
Es esencialmente una envoltura alrededor, pero más agradable que
iris %>%
with(Species %>% levels)
o
iris %>%
with(Species) %>%
levels
Está diseñado para ser conveniente cuando las funciones no tienen su propio argumento de datos, por ejemplo, con un gráfico que puede hacer
iris %>%
plot(Sepal.Length ~ Sepal.Width, data = .)
pero, por ejemplo, con ts.plot
no puedes hacer eso, así que ahora:
iris %$%
ts.plot(Sepal.Length)
[Sí, sé que el ejemplo no tiene sentido, pero ilustra el punto]
Tenga en cuenta también que [<-
y [[<-
también tienen alias, inset
y inset2
..
Desde la introducción del operador %>%
en el paquete magrittr
(y su uso en dplyr
), comencé a usar esto en mi propio trabajo.
Sin embargo, una simple operación me ha dejado perplejo. Específicamente, esta es la extracción (o subconjunto) de elementos de una lista.
Un ejemplo: en la base RI usaría $
, [
o [[
para extraer un elemento de una lista:
iris$Species
iris[["Species"]]
Puedo lograr lo mismo usando el %>%
pipe:
iris %>%
subset(select = "Species") %>%
head
Species
1 setosa
2 setosa
3 setosa
4 setosa
5 setosa
6 setosa
O
iris %>%
`[[`("Species") %>%
levels
[1] "setosa" "versicolor" "virginica"
Sin embargo, esto se siente como una solución desordenada y torpe.
¿Existe una forma más elegante y canónica de extraer un elemento de una lista utilizando el tubo %>%
?
Nota: no quiero ninguna solución que incluya dplyr
, por la sencilla razón de que quiero que la solución funcione con cualquier objeto R, incluidas listas y matrices, no solo marcos de datos.
Use use_series
, extract2
y extract
para $
, [[
, [
, respectivamente.
?extract
magrittr proporciona una serie de alias que pueden ser más agradables de usar cuando se componen cadenas utilizando el operador
%>%
".
Por tu ejemplo, podrías probar
iris %>%
extract("Species")
y
iris %>%
extract2("Species") %>%
levels
Consulte la parte inferior de esta página para obtener más información: http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html