1
我有一個關於爲列表中每個元素添加新列的問題,這些列將包含這些文件的修改名稱。到目前爲止,我可以用substr
來創建文件名列,但另一方面,我無法將新字符串添加到此列,例如「最佳」或「最差」字。修改文件列表中的文件名並將它們添加爲新列
這裏是我的重現性的嘗試,
這部分只生產文件.TXT工作目錄!
writeFiles <- function(n, maxRows=10){
lapply(seq(10,90,10),function(x) write.table(sample(sample(maxRows)[1],replace=F),paste(x,'.txt',sep=""), quote=FALSE, col.names = FALSE,row.names=FALSE))
}
writeFiles(9,10)
filesToProcess <- dir(pattern = "*\\.txt")
"10.txt" "20.txt" "30.txt" "40.txt" "50.txt" "60.txt" "70.txt" "80.txt" "90.txt"
在接下來的步驟我會讀這個文件,修改文件名,列只需要.txt文件的第一個字符。
data.list <- lapply(filesToProcess,function(x){
tmp <- read.table(file=x, header = F,fill=T, comment.char='*')
# tmp$filenames <- paste0(substr(x,1,1),c("best","worst"),sep="")
tmp$filenames <- substr(x,1,1)
return(tmp)
})
data.list
[[1]]
V1 filenames
1 4 1
2 3 1
3 7 1
4 8 1
5 1 1
6 2 1
7 6 1
8 5 1
[[2]]
V1 filenames
1 4 2
2 1 2
3 5 2
4 3 2
5 2 2
6 6 2
7 7 2
[[3]]
V1 filenames
1 1 3
2 3 3
3 2 3
等
事實上,我也希望新的字符串來filenames
列,我試過的lapply
內部粘貼命令,
data.list <- lapply(filesToProcess,function(x){
tmp <- read.table(file=x, header = F,fill=T, comment.char='*')
tmp$filenames <- paste0(rep(c("best","worst"),c(4,5)),substr(x,1,1),sep="")
return(tmp)
})
錯誤$<-.data.frame
(*tmp*
, 「文件名」 ,value = c(「best1」,#「best1」,:替換有9行,數據有8個
所以前4個.tx t文件被標記爲最佳,其餘5個文件是最差的.txt文件。
怎麼能在lapply
裏面做到這一點?
感謝Akrun。我們可以做到這一點,而不會脫離循環?像我建議的那樣。 – Alexander
@Alexander我修改了代碼,請檢查一下是否有效 – akrun
Hi Akrun。謝啦。和往常一樣完美:) – Alexander