【问题标题】:Output function results to multiple files in r?将函数结果输出到 r 中的多个文件?
【发布时间】:2014-01-29 22:24:42
【问题描述】:

我正在尝试对目录中的一批文件运行一个函数,如何将每个输出写入根据其来源命名的文件?例如:

files <- dir(pattern="*.csv")

for (i in 1:length(files)){
  dat<-reformat.funct(files[i])
  write.csv(dat, "???.reform.csv")
}

我想替换“???”上面带有“文件”中的第 i 个文件名。 也欢迎有关更有效方法的建议(对于超过一行的脚本)。

谢谢。

【问题讨论】:

  • 请注意,如果您希望 dir 仅返回名称以扩展名“.csv”结尾的文件,则您的模式应使用 pattern='\\.csv$'。在正则表达式中,* 表示“0 个或多个前面的字符”和“.”。表示“任何字符”。直译“。”必须用“\\”转义,“$”表示字符串结束。您的模式也将与名为“blahcsv.exe”的文件匹配。
  • 非常感谢您的建议!

标签: r loops batch-processing naming


【解决方案1】:

给定files

 out.files <- gsub("\\.csv$", ".reform.csv", files)

【讨论】:

  • @sherminds - 这可以在没有for 循环的情况下实现为:sapply(files, function(x) write.csv(reformat.funct(x), sub('\\.csv$', '.reform.csv', x)))
  • @jbaums - 太好了,我试图弄清楚如何用 sapply 做到这一点这几乎是神奇的,你应该把它写下来作为回应,这样我才能接受。
  • @Ricardo_Saporta - 这会生成新文件名的列表,但不会将重命名的文件输出到目录中。它如何与对象 datwrite.csv 集成?
  • @sherminds 我不会添加它作为答案,因为它的症结是由里卡多给出的。但是,要回答您的问题,使用 Ricardo 的建议和您的 for 循环,只需使用 write.csv(dat, out.files[i])
猜你喜欢
  • 2018-11-27
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2015-07-29
  • 2014-11-21
  • 2014-04-16
相关资源
最近更新 更多