2011-08-11 109 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