結果フレームを何にも割り当てていません! 以下のコードは、あなたが示そうとしていると私が思うことを実行します。ただし、おっしゃる通り非効率です。
result.frame = as.data.frame(matrix(ncol=2, nrow=10))
names(result.frame) = c("ID", "Value")
for (i in 1:10) {
value = 2 * i
result.frame = rbind(result.frame, c(i, value))
}
代わりに、data.frame を必要なフル サイズにして、それに割り当てます。
result.frame = as.data.frame(matrix(ncol=2, nrow=20))
names(result.frame) = c("ID", "Value")
for (i in 11:20) {
value = 2 * i
result.frame[i,] = c(i, value)
}
簡単なタイミング:
> result.frame=data.frame()
> system.time(for(i in 1:10000){result.frame=rbind(result.frame, c(i,i*2))})
user system elapsed
9.844 0.000 9.874
> result.frame=as.data.frame(matrix(ncol=2, nrow=10000))
> system.time(for(i in 1:10000){result.frame[i,]=c(i,i*2)})
user system elapsed
7.041 0.056 7.120
>
時間効率のほかに、データが大きくなるにつれて重要なメモリの問題もあります。操作を実行するrbind
には、データをコピーする必要があります。つまり、連続したブロックで 2 倍のメモリが必要になります。既に作成されたものへの割り当てには、data.frame
この問題はありません。