Наиболее эффективный метод list to data.frame, когда список представляет собой список строк - PullRequest
3 голосов
/ 07 января 2012

Этот вопрос охватывает случай, когда у меня есть список столбцов, и я хочу превратить их в data.frame. Что если у меня есть список строк, и я хочу превратить их в data.frame?

rowList <- lapply(1:500000,function(x) sample(0:1,300,x))

Наивный способ решить эту проблему - использовать rbind и as.data.frame, но мы даже не можем пройти шаг rbind:

>Data <- do.call(rbind,vectorList)
Error: cannot allocate vector of size 572.2 Mb

Что эффективнее для этого?

Ответы [ 2 ]

5 голосов
/ 07 января 2012

Вероятно, будет быстрее / эффективнее unlist заполнить ваш список и заполнить матрицу:

> m <- matrix(unlist(vectorList), ncol=300, nrow=length(vectorList), byrow=TRUE)

Но вам понадобится ~ 6 ГБ оперативной памяти, чтобы сделать это с целочисленными векторами, и ~ 12 ГБ оперативной памяти, чтобы сделать это с числовыми векторами.

> l <- integer(5e6*300)
> print(object.size(l),units="Gb")
5.6 Gb
1 голос
/ 07 января 2012

Попробуйте прямое приведение к матрице, опираясь на основной аспект столбца R-массивов:

Data <- matrix(unlist(vectorList), ncol = length(vectorList[[1]]), byrow = TRUE)

Если это также не работает, у вас нет ресурсов для копирования этой вещи, поэтому подумайте о созданииматрица сначала и заполняет ее столбец за столбцом.

...