2011-08-11 64 views
4

我有这样写许多文件在for循环中

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循环的修改吗?

回答

12

鉴于你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将粘贴在一起的文件名为你。

5

试试这个,

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) 
} 
+0

谢谢!所以我们必须在for循环中添加另一条语句来保存文件名......很好 – Matt

+0

不,你可以直接通过''write.table(lst [[ii]],paste(ii,“.txt”,sep = “”),col.names = FALSE,row.names = FALSE,sep =“\ t”,quote = FALSE)''但我认为它会更清晰两行。 – baptiste