13

私はRに比較的慣れていないので、データフレームを繰り返し構築する最も効率的な方法を考えていました(一度に1行、繰り返し回数「n」、各行の長さ「l」は事前にわかっています)。

  1. 空のデータフレームを作成し、反復ごとに行を追加します
  2. nxlデータフレームを事前に割り当て、反復ごとに行を変更します
  3. nxl行列を事前に割り当て、反復ごとに行を変更し、行列からデータフレームを作成します
  4. 他の何か
4

2 に答える 2

17

事前割り当て!!!

matrixまた、データがすべて同じ型の場合はa を使用します。よりもはるかに高速になりますdata.frame

例えば:

> n <- 1000      # Number of rows
> row <- 1:20*1  # one row
> 
> # Adding row, one-by-one
> Data <- data.frame()
> system.time(for(i in 1:n) Data <- rbind(Data,row))
   user  system elapsed 
   2.18    0.00    2.18 
> 
> # Pre-allocated data.frame
> Data <- as.data.frame(Data)
> system.time(for(i in 1:n) Data[i,] <- row)
   user  system elapsed 
   0.94    0.00    0.93
>
> # Pre-allocated matrix (fast!)
> Data <- as.matrix(Data)
> system.time({ for(i in 1:n) Data[i,] <- row; Data <- as.data.frame(Data) })
   user  system elapsed 
      0       0       0 
于 2010-10-27T14:01:58.460 に答える
1

最初にリストから必要な列タイプを事前に割り当ててみませんか?

as.data.frame(list(a1 = vector("numeric", n), a2 = vector("character", n)))

于 2010-10-28T01:00:32.570 に答える