【发布时间】:2021-09-04 18:22:53
【问题描述】:
是否可以从 data.table 有条件地写入外部文件?目前使用基本的for循环,然后访问行/列,但速度很慢。
for (row in seq_len(nrow(dt))) {
<if - else condition by accessing row and column as dt[row, column]>
write(<text>, file=<file>, append=append)
}
条件非常复杂,不容易转换,然后使用 fwrite 将 data.table 中的输出转储到外部文件中(假设这是最快的选项)
我只是想知道 data.table 支持“set”是否会比基本 for 循环更快(来自以下博客之一的示例)但是我们如何从 data.table 的“set”执行 fwrite() ?
dt <- data.table(mtcars)[,1:5, with=F]
for (j in c(1L,2L,4L)) set(dt, j=j, value=-dt[[j]]) # integers using 'L' passed for efficiency
for (j in c(3L,5L)) set(dt, j=j, value=paste0(dt[[j]],'!!'))
head(dt)
【问题讨论】:
-
坦率地说,我怀疑逐行执行此操作的效率(从 R 效率)尽可能低。我建议一步完成你的
if,然后一步写出结果行。我也看不到您的第一个块(遍历行,一次写入一行)与您的第二个块(遍历列,set以适当地更新每一列)相关。两者有什么关系?最后,您需要对dt和<file>进行什么操作? -
@r2evans 代码在两个块中显示仅供参考,我同意一个是按行,另一个是按列。我更多的是逐行寻找解决方案。我没有探索处理 data.table 中的所有内容然后使用 fwrite() 转储输出的选项。
标签: r data.table