【问题标题】:Write many files in a for loop在for循环中写入许多文件
【发布时间】:2011-10-25 09:51:13
【问题描述】:

我有这样的样本数据

df <- data.frame(name = rep(letters[1:7], each = 24), salary = runif(24*7, 100, 200))

我想把每个名字和他们的薪水分开

lst <- tapply(df$salary, df$name, matrix, nrow = 4, byrow = TRUE)

现在我想将所有这 7 个矩阵写入 7 个不同的文本文件,它一次只能用于一个矩阵。我试图放入一个 for 循环,但没有工作

for (i in 1:7)
{
write.table(lst[i], ".txt", col.names = FALSE, row.names = FALSE, sep = "\t", quote = FALSE)
}

任何人都可以建议在 for 循环中进行修改吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    给定你的lst,下面会写出一系列TXT文件,名字等于lst,加上.txt

    lapply(names(lst),
           function(x, lst) write.table(lst[[x]], paste(x, ".txt", sep = ""),
                                        col.names=FALSE, row.names=FALSE, sep="\t", 
                                        quote=FALSE),
           lst)
    

    要修改您的 for() 循环,请尝试:

    for(i in seq_along(lst)) {
        write.table(lst[[i]], paste(names(lst)[i], ".txt", sep = ""), 
                    col.names = FALSE, row.names = FALSE, sep = "\t", quote = FALSE)
    }
    

    问题在于尝试或假设 R 会为您将文件名粘贴在一起。

    【讨论】:

      【解决方案2】:

      试试这个,

      for (ii in names(lst)){
        filename <- paste(ii, ".txt", sep="")
        write.table(lst[[ii]], filename, col.names=FALSE,row.names=FALSE,sep="\t",quote=FALSE)
      }
      

      【讨论】:

      • 谢谢!所以我们必须在 for 循环中添加另一个语句来保存文件名...太棒了
      • 不,你可以直接传递write.table(lst[[ii]], paste(ii, ".txt", sep=""), col.names=FALSE,row.names=FALSE,sep="\t",quote=FALSE),但我认为两行会更清楚。
      猜你喜欢
      • 2021-07-06
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 2020-02-14
      • 2018-01-12
      相关资源
      最近更新 更多