在具有不同数据帧名称的循环中转换为RData格式

时间:2016-06-02 08:24:40

标签: r for-loop

我想编写一个循环,将来自不同文件夹的txt文件转换为RData格式。这些文件具有相同的名称,因此我想有条件地重命名它们并将它们保存到一个文件夹中。循环完成了这项工作,但它为所有文件保存了相同的数据框名称。有更好的方法吗?

for (i in (sprintf("%02d", (seq(from=8, to=15))))) {
  for (j in 1:4){
    load <- paste0("C:/Users/User/Desktop/data/20", i, "/20", i, ".", j, "kw/data.txt")
    save <- paste0("data.20", i, ".", j, "kw")
    save <- read.table(load, sep="|", header=T)
  save(save, file=paste0("./data-r/data.20", i, ".", j, "kw.RData"))
  }}

1 个答案:

答案 0 :(得分:0)

我认为您的代码的以下调整应该可以解决问题。

for (i in (sprintf("%02d", (seq(from=8, to=15))))) {
  for (j in 1:4){
    load <- paste0("C:/Users/User/Desktop/data/20", i, "/20", i, ".", j, "kw/data.txt")
    save <- paste0("data.20", i, ".", j, "kw")
    assign(x = save,
           value = read.table(load, sep="|", header=T))
    eval(bquote(
        save(.(as.name(save)),
             file=paste0("./data-r/data.20", i, ".", j, "kw.RData"))
    ))
    eval(bquote(rm(.(as.name(save)))))
  }}

assign - 函数可确保将文件内容分配给save - 对象的当前值。

eval + bquote + .() + as.name构造用于创建(和评估)对save - 函数的调用,以便它不保存您的save - 对象,而是保存名称存储在save中的对象。

最后使用rm,以避免工作区(和内存绑定)与文件中的内容混乱。