0

R では、次の方法でデータ フレームを作成します。

data <- data.frame(dummy=rep('dummy',10000))
data$number = 0
data$another = 1

データ フレームに値を代入する for ループ (行を反復処理) を実行すると、コードの実行速度が非常に遅くなります

calculation <- function() {2}
somethingElse <- function() {3}

system.time(
 for (i in 1:10000) {
   data[i,2]=calculation()
   data[i,3]=somethingElse()
 }
)

上記のスニペットは、私のラップトップで 20 秒で実行されます。C や Java などの他の言語では、これは即座に終了します。なぜRでこんなに遅いのですか? R は列ごとに行列を格納することを読んだことを覚えています (たとえば、行ごとの C とは異なります)。それでも、なぜそんなに時間がかかるのか、私は困惑しています。私のdata.frameはメモリに快適に収まるべきではありませんか(遅いディスク書き込み動作を回避します)?

私の質問の続きとして、データフレームが存在する場合、行ごとにデータフレームを埋める簡単な方法をお願いしたいと思います。

編集: 定数 2 と 3 をデータ フレームに割り当てようとしているわけではないことに注意してください。calculation() と somethingElse() を解決しようとしていた実際の問題はもう少し複雑で、別のデータ フレームに依存しています。私の質問は、ループ内のデータ フレームへの効率的な挿入に関するものです (また、これが非常に遅い理由についても興味があります)。

4

1 に答える 1