У меня есть три или более независимых переменных, представленных в виде векторов 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)
поэтому, если вы знаете способ сделать оба шага одновременно, это также будет полезно.
f
является заполнителем для одного из нескольких сложных математических вычислений, но для целей этого вопроса, я думаю, вам нужно знать, что все они берут N векторов соответствующего типа и производят один вектор; все входы должны быть одинаковой длины, и выход также имеет эту длину. - person zwol   schedule 30.11.2010data.table
, а неdata table
. - person Frank   schedule 11.11.2015