une autre façon serait
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 vous ne spécifiez pas simplify = FALSE
, vous devez transposer le résultat en utilisant t
. Cela peut être fastidieux pour les grandes structures.
Cette solution est particulièrement pratique si vous avez un jeu de données sur le grand côté et/ou si vous devez répéter cela plusieurs fois.
Je propose quelques minutages de solutions dans ce "thread".
> 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
Notez qu'il s'agit probablement de la solution la moins efficace proposée. Pour de très petits ensembles de données, cela n'aura pas d'importance, mais vous ne devriez pas utiliser rbind ou cbind dans une boucle si vous voulez être efficace. – Dason