Mam następujący zagnieżdżona pętla:iteracyjnego iloczyn kartezjański wektorów
for (x in xs) {
for (y in ys) {
# Do something with x and y
}
}
Które chciałbym spłaszczyć tak myślałem budowy iloczyn kartezjański dwóch wektorów xs
i ys
i iteracji nad wyniku . W Pythonie, byłoby to banalne:
for xy in product(xs, ys):
# x, y = xy[0], xy[1]
Ale w R, najprostszy równoważne Znalazłem wygląda trudne:
xys <- expand.grid(xs, ys)
for (i in 1 : nrow(xys)) {
xy <- as.vector(xys[i, ])
# x <- xy[1], y <- xy[2]
}
pewnością nie musi być lepszy sposób, nie? (Dla wyjaśnienia, nie chcę iteracyjne nad indeks ... myślę, że musi być jakiś sposób, aby bezpośrednio iteracyjne nad krotek w produkcie.)
@Konrad Rudolph: Usunąłem odpowiedź. Nie było w tym nic złego. Nie byłem pewien, czy było to dokładnie rozwiązanie, którego szukałeś. @flodel ma rację co do problemów przy użyciu 'apply' z mieszanym typem danych wejściowych. W takim przypadku możesz użyć 'as.numeric', aby przekształcić ciąg znaków w wartość liczbową. Ale nie ma problemu, o ile używasz tylko wektorów liczbowych. –