Подтвердить что ты не робот

Итеративно построенный dataframe в R

Я относительно новичок в R и задавался вопросом об эффективнейшем итеративном построении dataframe (по одной строке за раз, количество итераций "n" и длина каждой строки "l" известны заранее).

  • Создайте пустой фреймворк данных, добавьте строку для каждой итерации
  • Предопределить n x l dataframe, изменить строку на каждую итерацию
  • Предопределить матрицу n x l, изменить строку на каждую итерацию, сделать фрейм данных из матрицы
  • Что-то еще
4b9b3361

Ответ 1

Предварительно выделить!!!

И используйте matrix, если данные одного типа. Это будет намного быстрее, чем 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 

Ответ 2

Как насчет предварительного выделения с любыми типами столбцов, которые вам нужны из списка?

as.data.frame(список (a1 = вектор ( "числовой", n), a2 = вектор ( "символ", n)))