【发布时间】:2020-02-13 07:35:32
【问题描述】:
我在名为 myFolder 的文件夹中有 45 个 csv 文件。每个 csv 文件有 13 列和 640 行。
我想读取每个 csv 并将列 7:12 除以 10 并将其保存在一个名为“我的文件夹”的新文件夹中。这是我的方法 正在使用简单的 for 循环。
library(data.table)
dir.create('newFolder')
allFiles <- list.files(file.path('myFolder'), pattern = '.csv')
for(a in seq_along(allFiles)){
fileRef <- allFiles[a]
temp <- fread(file.path('myFolder', fileRef)
temp[, 7:12] <- temp[, 7:12]/10
fwrite(temp, file.path('myFolder', paste0('new_',fileRef)))
}
有没有更简单的解决方案在一两行中使用 datatable 和 apply 函数来实现这一点?
【问题讨论】:
-
您也许可以将
for循环替换为apply函数,但apply 的匿名函数看起来与您当前的for 循环体几乎相同。 -
你的目标是什么?只是为了减少您输入的代码量?您实际上并没有执行不必要的步骤,并且“将某些列除以 10 并另存为新文件”不是一个足够常见的过程,无法为您提供一个功能。
-
是的。我想减少代码量,以防万一,我有一些非常大的 csv 文件需要大量时间来读取,也许更高效的代码会有用?
-
如果您的代码没有问题并且您寻求紧凑、优雅或重构,请在CodeReview 上提问。当我们试图反对不幸的 R 神话时:
for循环没有错。
标签: r for-loop data.table sapply