У меня есть три или более независимых переменных, представленных как R-векторы, например:
A <- c(1,2,3)
B <- factor(c('x','y'))
C <- c(0.1,0.5)
и я хочу взять декартово произведение всех из них и поместить результат в кадр данных, например:
A B C
1 x 0.1
1 x 0.5
1 y 0.1
1 y 0.5
2 x 0.1
2 x 0.5
2 y 0.1
2 y 0.5
3 x 0.1
3 x 0.5
3 y 0.1
3 y 0.5
Я могу сделать это, вручную выписав вызовы rep
:
d <- data.frame(A = rep(A, times=length(B)*length(C)),
B = rep(B, times=length(A), each=length(C)),
C = rep(C, each=length(A)*length(B))
но должен быть более элегантный способ сделать это, да? product
в itertools
выполняет часть задания, но я не могу найти способ поглотить вывод итератора и поместить его в фрейм данных. Любые предложения?
p.s. Следующий шаг в этом вычислении выглядит как
d$D <- f(d$A, d$B, d$C)
поэтому, если вы знаете способ сделать оба действия одновременно, это также будет полезно.