Aby używać list składanych w stylu Pythona z wyliczeniami, takimi jak listy wyliczane, jednym ze sposobów jest zainstalowanie pakietu List-compention LC
(opracowany w 2018 r.) I itertools (opracowany w 2015 r.).
Listy składane w R
LC
Pakiet znajdziesz tutaj .
install.packages("devtools")
devtools::install_github("mailund/lc")
Przykład
> 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"
gdzie składnia programowania nie jest jeszcze tak czysta i dopracowana jak w Pythonie, ale działa funkcjonalnie, a jej pomoc przedstawia:
„Składnia jest następująca: lc (wyrażenie, listy, predykaty) gdzie wyrażenie jest wyrażeniem, które ma zostać ocenione dla wszystkich elementów na listach, gdzie listy to jedna lub więcej nazwanych list, gdzie są one określone przez nazwę i nazwę wyrażenia = list_expr i gdzie predykaty są wyrażeniami, które powinny być obliczane na wartość logiczną. Na przykład, aby uzyskać listę wszystkich liczb parzystych do kwadratu z listy x, możemy napisać lc (x ** 2, x = x, x% % 2 == 0). Wynikiem wywołania lc jest lista utworzona z wyrażeń w wyrażeniu dla wszystkich elementów na listach wejściowych, których predykaty są prawdziwe. "
gdzie zauważ, że możesz pozostawić predykaty puste, na przykład w powyższym przykładzie.
Narzędzia itertools i wyliczenia w stylu Pythona
Możesz użyć itertools R, które są bardzo podobne do itertools w Pythonie, dalej w Cran tutaj
library(itertools)
gdzie opisano
„Różne narzędzia do tworzenia iteratorów, wiele wzorowanych na funkcjach w module itertools języka Python i inne wzorowane na funkcjach z pakietu 'snow'”.
Przykład. wyliczenie
> 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"
Przykład. wyliczenie za pomocą 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)