我有一个大文本文件(> 1000 万行,> 1 GB),我希望一次处理一行以避免将整个内容加载到内存中。处理完每一行后,我希望将一些变量保存到一个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
就地修改对象吗?有没有更好的方法来加载、处理和保存这些数据?目前的方法很慢!