我有一个问题,即为列表的每个元素添加新列,其中包含这些文件的修改名称。到目前为止,我能够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*
,“文件名”,值= c(“best1”,#“best1”,:替换有9行,数据有8 所以前4个.txt文件被标记为最佳,剩下的5个文件是最差的.txt文件。
如何在lapply
内完成?
答案 0 :(得分:2)
我们可以将“数据列表”的前四个元素进行子集,循环显示它们,然后transform
&#39;文件名&#39;列。
data.list[1:4] <- lapply(data.list[1:4], transform, filenames= paste0("best", filenames))
同样,对剩余的5个list
元素
data.list[5:9] <- lapply(data.list[5:9], transform, filenames= paste0("worst", filenames))
我们也可以通过&#39; filesToProcess&#39;通过创建vector
最佳&#39;,&#39;最差&#39;然后循环遍历&#39; filesToProcess&#39;
v1 <- rep(c("best", "worst"), c(4, 5))
lapply(seq_along(filesToProcess),function(i){
tmp <- read.table(file=filesToProcess[i], header = FALSE, fill=TRUE, comment.char='*')
tmp$filenames <- paste0(v1[i], substr(filesToProcess[i],1,1), sep="")
tmp
})