Mar*_*n H 10 filenames for-loop r file
一个非常简单的R脚本将升序行索引添加到文本文件"0.txt",并为其添加标题"time".之后,数据被写入文件"0-edit.txt"
data<-read.table("0.txt", header=TRUE,sep=",",row.names= NULL);
colnames(data)[1] = "time"
write.table(data,quote=FALSE,sep=", ","0-edit.txt");
Run Code Online (Sandbox Code Playgroud)
假设我在同一文件夹中有4个名为0.txt,1.txt,2.txt,...的文件,我如何使用计数器(或其他东西)在我的脚本中迭代这些文件名?
Jos*_*ich 14
for(i in 0:3) {
infile <- paste(i,".txt",sep="")
outfile <- paste(i,"-edit.txt",sep="")
data <- read.table(infile,header=TRUE,sep=",",row.names=NULL)
colnames(data)[1] = "time"
write.table(data,quote=FALSE,sep=", ",outfile)
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*ell 14
这是一个没有使用lapply循环的解决方案:
infiles <- dir(pattern='\\.txt$')
change.files <- function(file){
data <- read.table(file, header=TRUE, sep=",", row.names=NULL)
colnames(data)[1] = "time"
write.table(data, quote=FALSE, sep=", ", sub("\\.txt$","-edit.txt", file))
}
lapply(infiles , change.files)
Run Code Online (Sandbox Code Playgroud)
对我来说,这种方法的真正优势在于您可以使用mclapply(来自多核包)而不是lapply 轻松地并行运行它.或者parLapply来自雪.对我来说它看起来更好.
小智 7
试试这个:
files <- list.files(path="", pattern=".txt", all.files=T, full.names=T)
for (file in files) {
## do stuff
}
Run Code Online (Sandbox Code Playgroud)
您可以使用正则表达式进行模式匹配,因此如果您有大量文本文件但只想要具有数字名称的文本文件,请使用"[0-9] .txt"或"[0-3] .txt".