He tres o más variables independientes representados como vectores R, así:trama de datos producto cartesiano en I
A <- c(1,2,3)
B <- factor(c('x','y'))
C <- c(0.1,0.5)
y quiero tomar el producto cartesiano de todos ellos y poner el resultado en un conjunto de datos marco, de esta manera:
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
me puede hacer esto escribiendo manualmente llamadas a 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))
pero debe haber una forma más elegante de hacerlo, ¿sí? product
en itertools
hace parte del trabajo, pero no puedo encontrar ninguna manera de absorber la salida de un iterador y ponerlo en un marco de datos. ¿Alguna sugerencia?
p.s. El siguiente paso en este cálculo parece
d$D <- f(d$A, d$B, d$C)
así que si conoces una manera de hacer las dos pasos a la vez, que también serían útiles.
sería útil si especificas qué hace la función f. – Ramnath
'f' es un marcador de posición para uno de varios cálculos matemáticos diferentes, pero a los efectos de esta pregunta, creo * que lo que necesita saber es que todos toman N vectores del tipo apropiado y producen un vector; todas las entradas deben tener la misma longitud y la salida también es de esa longitud. – zwol
Yo recomendaría cambiar el título de esta pregunta ... "tabla de datos" ahora significa algo diferente en R. –