【发布时间】:2014-01-28 15:46:19
【问题描述】:
当我需要处理原始数据或生成大量合成数据时,我在 Python 中使用 pytables 并循环遍历每一行并将该行“附加”到表中。所以我不必事先知道桌子的大小。例如,
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 之类的软件包应该对此有用,但我看到的示例与我的需要有点不同。是否有任何代码 sn-ps 在 R 中执行类似的操作?我认为一个简单的代码示例会很有帮助。
【问题讨论】:
-
R 和 Python 之间存在一些根本差异。在 R 中,您通常不会遍历每一行并附加它。通常有更好的选择。但是,R 旨在将所有内容保存在内存中。如果这对您来说不可能,您至少应该使用更大的整个数据块,而不仅仅是单行。或者你继续使用 Python,因为这似乎对你有用......
-
ff和bigmemory与您的需求有何不同?因为这些是您首先想到的问题。 -
@Roland 不是。在 Python 中,我不会遍历每一行并附加它——例如,我会使用 numpy 数组或 recarray。只是在这个特定的应用程序中我需要这样做。此外,每一行 VS 每个块在这里不是一个基本问题,问题是附加增量数据而不是一次生成所有内容。当然 - 我很想为此使用 Python,但我必须为这个应用程序使用 R。
-
@JanvanderLaan 对不起,我的意思是我看到的例子是数据集已经是 csv 文件的情况——这不是我想要的。