Para utilizar listas por comprensión de estilo Python con enumeraciones, como listas enumeradas, una forma es instalar el paquete List-comprehension LC
(desarrollado en 2018) y el paquete itertools (desarrollado en 2015).
Lista de comprensiones en R
Puedes encontrar el LC
paquete aquí .
install.packages("devtools")
devtools::install_github("mailund/lc")
Ejemplo
> library(itertools); library(lc)
> lc(paste(x$index, x$value), x=as.list(enumerate(rnorm(5))), )
[[1]]
[1] "1 -0.715651978438808"
[[2]]
[1] "2 -1.35430822605807"
[[3]]
[1] "3 -0.162872340884235"
[[4]]
[1] "4 1.42909760816254"
[[5]]
[1] "5 -0.880755983937781"
donde la sintaxis de programación aún no es tan limpia y pulida como en Python, pero funciona funcionalmente y sus esquemas de ayuda:
"La sintaxis es la siguiente: lc (expr, listas, predicados) donde expr es una expresión que se evaluará para todos los elementos de las listas, donde las listas son una o más listas con nombre, donde se especifican mediante un nombre y un nombre de expresión = list_expr, y donde los predicados son expresiones que deben evaluarse a un valor booleano. Por ejemplo, para obtener una lista de todos los números pares, al cuadrado, de una lista x podemos escribir lc (x ** 2, x = x, x% % 2 == 0). El resultado de una llamada a lc es una lista construida a partir de las expresiones en expr, para todos los elementos en las listas de entrada donde los predicados se evalúan como verdaderos ".
donde observe que puede dejar los predicados vacíos, por ejemplo, en el ejemplo anterior.
Itertools y enumeraciones de estilo Python
Puede usar las herramientas de iteración de R que son muy similares a las herramientas de iteración de Python, más adelante en Cran aquí
library(itertools)
donde se describe
"Varias herramientas para la creación de iteradores, muchas con patrones de funciones en el módulo itertools de Python, y otras con patrones de funciones en el paquete 'snow'".
Ejemplo. enumeración
> for (a in as.list(enumerate(rnorm(5)))) { print(paste(a$index, "index:", a$value))}
[1] "1 index: 1.63314811372568"
[1] "2 index: -0.983865948988314"
[1] "3 index: -1.27096072277818"
[1] "4 index: 0.313193212706331"
[1] "5 index: 1.25226639725357"
Ejemplo. enumeración con ZIP
> for (h in as.list(izip(a=1:5, b=letters[1:5]))) { print(paste(h$a, "index:", h$b))}
[1] "1 index: a"
[1] "2 index: b"
[1] "3 index: c"
[1] "4 index: d"
[1] "5 index: e"
expand.grid(i=10:20,j=10:20)