当我需要处理原始数据或生成大量合成数据时,我在 Python 中使用 pytables 并循环遍历每一行并将该行“附加”到表中。所以我不必事前知道 table 的大小。例如,
import tables
class test(tables.IsDescription):
col1 = tables.Int32Col()
col2 = tables.Int32Col()
hdf5_a = tables.openFile('test.hdf5', 'a')
table = hdf5_a.createTable('/', 'test', test)
for i in range(10):
table.row['col1'] = i
table.row['col2'] = i * 10
table.row.append()
table.flush()
hdf5_a.close()
我需要用 R 做同样的事情。基本上我想要:
- 生成综合数据
- 将数据动态附加到磁盘上的二进制文件
- 稍后使用此数据,而不将整个数据加载到内存
我似乎像 ff
和 bigmemory
这样的包对此很有用,但我看到的示例与我的需要有点不同。 R 中有没有类似的代码片段?我认为一个简单的代码示例会非常有帮助。
最佳答案
首先是一个用于生成一些数据的函数
gendata <- function() {
n <- 1E3
data.frame(a = 1:n, b = rnorm(n), c = sample(letters, n, replace=TRUE))
}
ff
+ ffbase
对于ff
,可以使用以下模式:
library(ffbase)
dat <- NULL
for (i in seq_len(10)) {
d <- gendata()
dat <- ffdfappend(dat, d)
}
save.ffdf(dat, dir="./test")
可以使用load.ffdf("./test")
再次加载数据。
CSV
对于测试/csv 文件,可以使用以下模式:
con <- file("test.csv", "wt")
first_block <- TRUE
for (i in seq_len(10)) {
d <- gendata()
write.table(d, file=con, sep=",", row.names=FALSE, col.names=first_block)
first_block <- FALSE
}
close(con)
要使用它,您首先必须将其导入 ff
或 bigmemory
,或者您可以使用 LaF
使用它(只读) >。
关于python - 通过在 R 中附加记录来生成大型数据文件的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21374859/