У меня есть большой текстовый файл (> 10 миллионов строк,> 1 ГБ), который я хочу обрабатывать по одной строке за раз, чтобы избежать загрузки всего в память. После обработки каждой строки я хочу сохранить некоторые переменные в объект big.matrix
. Вот упрощенный пример:
library(bigmemory)
library(pryr)
con <- file('x.csv', open = "r")
x <- big.matrix(nrow = 5, ncol = 1, type = 'integer')
for (i in 1:5){
print(c(address(x), refs(x)))
y <- readLines(con, n = 1, warn = FALSE)
x[i] <- 2L*as.integer(y)
}
close(con)
где x.csv
содержит
4
18
2
14
16
Следуя советам здесь http://adv-r.had.co.nz/memory.html Я напечатал адрес памяти моего объекта big.matrix
, и он меняется с каждой итерацией цикла:
[1] "0x101e854d8" "2"
[1] "0x101d8f750" "2"
[1] "0x102380d80" "2"
[1] "0x105a8ff20" "2"
[1] "0x105ae0d88" "2"
Можно ли изменить
big.matrix
объекты на месте?есть ли лучший способ загрузить, обработать и затем сохранить эти данные? Текущий метод медленный!
data.table
. Он предназначен для больших данных (или, по крайней мере, больших данных). - person Richard Erickson   schedule 14.07.2015data.table
вы можете избежать чтения своих данных по одной строке за раз. Кроме того, использованиеdata.table
может обрабатывать память лучше, чемbig.matrix
. Наконец, насколько я помню, функцияfread
не работала, поэтому мне пришлось установитьdata.table
из git hib. Если вы попробуетеfread
и это не сработает, это будет мой первый шаг по устранению неполадок. - person Richard Erickson   schedule 14.07.2015