在for循环中写入许多文件

Mat*_*att 4 r

我有这样的样本数据

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

我想把每个名字和他们的工资分开

lst <- tapply(df$salary, df$name, matrix, nrow = 4, byrow = TRUE)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Rei*_*son 15

鉴于你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)
Run Code Online (Sandbox Code Playgroud)

要修改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)
}
Run Code Online (Sandbox Code Playgroud)

问题是试图或假设R会为你粘贴文件名.


bap*_*ste 8

试试这个,

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)
}
Run Code Online (Sandbox Code Playgroud)