python - 通过在 R 中附加记录来生成大型数据文件的好方法是什么?

标签 python r pytables

当我需要处理原始数据或生成大量合成数据时,我在 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 做同样的事情。基本上我想要:

  1. 生成综合数据
  2. 将数据动态附加到磁盘上的二进制文件
  3. 稍后使用此数据,而不将整个数据加载到内存

我似乎像 ffbigmemory 这样的包对此很有用,但我看到的示例与我的需要有点不同。 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)

要使用它,您首先必须将其导入 ffbigmemory,或者您可以使用 LaF 使用它(只读) >。

关于python - 通过在 R 中附加记录来生成大型数据文件的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21374859/

相关文章:

python - django selenium LiveServerTestCase

python - 如何插入部分 Pandas 数据框

pytables - pytables 数组上的核心外 'where'

python - python中的打印格式

python - 为什么 Python Multiprocessing Workers 不会死?

r - 如何通过多个变量重新排序条形图

r - 按颜色对 ggplot facet_wrap 进行排序?

r - 为什么sample()不适用于单个数字?

python - 仅使用 requirements.txt 安装 PyTables

python - 使用 table.where 在 PyTables 中进行复杂查询