I'm relatively new to R, and was wondering the most efficient way to it开发者_StackOverflow社区eratively construct a dataframe (one row at a time, the number of iterations "n" and the length of each row "l" are known beforehand).
- Create empty dataframe, add a row each iteration
- Preallocate n x l dataframe, modify a row each iteration
- Preallocate n x l matrix, modify a row each iteration, make dataframe from matrix
- Something else
Pre-allocate!!!
And use a matrix
if the data are all the same type. It will be much faster than a data.frame
.
For example:
> 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
How about pre-allocating with whatever column types you need from a list first?
as.data.frame(list(a1 = vector("numeric", n), a2 = vector("character", n)))
精彩评论