我对 R 比较陌生,并且想知道迭代构造数据帧的最有效方法(一次一行,迭代次数“n”和每行的长度“l”是事先知道的)。
- 创建空数据框,每次迭代添加一行
- 预分配 nxl 数据帧,每次迭代修改一行
- 预分配nxl矩阵,每次迭代修改一行,从矩阵制作数据帧
- 别的东西
预分配!!!
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
首先从列表中预分配您需要的任何列类型怎么样?
as.data.frame(list(a1 = vector("numeric", n), a2 = vector("character", n)))