1

他の R コードでは、ループが開始される前に data.frame が宣言されるのが一般的です。2000 行のデータ フレーム data1 があるとします。ループでは、data1 をループする Web サービスを介して、新しい data.frame data2 を作成しています。(ループを使用しないことはお勧めしません)。また、data2$result と data2$pubcount には、2000 個の data1 項目ごとに異なる値を格納する必要があります。

ループの前に宣言する必要がありますか

data2=data.frame()

後で使用する行数と列数をRに伝える必要がありますか? 宣言せずに列を追加できることを知っています。行はどうですか。することに利点はありますか:

data2<-data.frame(id=data1$id)

私は絶対に宣言し、実行しなければならないことだけを実行したいと思います。空の宣言がループで一度エラーになるのはなぜですか?

後で編集:速度とメモリは問題ではありません。10 秒と 30 秒では違いがありません。私は 100 MB 未満のデータと大きな PC (8 GB) を持っています。データは数値とテキスト (混合) であるため、マトリックスはオプションではないため、非マトリックスを使用する必要があります。

4

1 に答える 1

3

このようなもの:

df <- data.frame(a=numeric(n),b=character(n))

for (i in 1:n) {

#<do stuff>
df[i,1] <- ...
df[i,2] <- ...

}

data.frames のサブセット化は処理が遅いため、ループ内で data.frames を操作することは避けてください。

a <- numeric(n)   
b <- character(n) 

for (i in 1:n) {

#<do stuff>
a[i] <- ...
b[i] <- ...

}
df <- data.frame(a,b)

もちろん、多くの場合、forループよりも優れた方法があります。ただし、オブジェクトを大きくしないようにすることを強くお勧めします (その方法は教えません)。ここに示すように事前に割り当てます。

なぜ事前に割り当てる必要があるのですか?ループ内でオブジェクトを成長させるのは遅いので、R のループが遅いと人々が考える主な理由の 1 つです。

于 2013-01-30T16:37:49.663 に答える