otra forma sería
do.call("rbind", sapply(1:20, FUN = function(i) c(i+i,i*i,i/1), simplify = FALSE))
[,1] [,2] [,3]
[1,] 2 1 1
[2,] 4 4 2
[3,] 6 9 3
[4,] 8 16 4
[5,] 10 25 5
[6,] 12 36 6
Si no especifica simplify = FALSE
, tiene que transponer el resultado usando t
. Esto puede ser tedioso para estructuras grandes.
Esta solución es especialmente útil si tiene un conjunto de datos en el lado grande y/o necesita repetir esto muchas veces.
Ofrezco algunos tiempos de soluciones en este "hilo".
> system.time(do.call("rbind", sapply(1:20000, FUN = function(i) c(i+i,i*i,i/1), simplify = FALSE)))
user system elapsed
0.05 0.00 0.05
> system.time(ldply(1:20000, function(i)c(i+i, i*i, i/1)))
user system elapsed
0.14 0.00 0.14
> system.time({d <- matrix(nrow=20000, ncol=3)
+ for (i in 1:20000) { d[i,] <- c(i+i, i*i, i/1)}})
user system elapsed
0.10 0.00 0.09
> system.time(ldply(1:20000, function(i)c(i+i, i*i, i/1)))
user system elapsed
62.88 0.00 62.99
Tenga en cuenta que esta es probablemente la solución menos eficiente propuesta. Para conjuntos de datos muy pequeños no importará demasiado, pero no debería usar rbind o cbind dentro de un bucle si quiere ser eficiente. – Dason