对于循环,在R中批打印多个文件
我有5个选项卡文件,分别称为“1.txt”、“2.txt”、“5.txt”。每个文件包含一个名为“x”的列和另一个名为“y”的列 我想应用一个循环,分别从每个文件生成一个绘图,并将绘图重定向到相应的输出pdf文件中,分别称为“1.pdf”、“2.pdf”。。。“5.pdf” 以下是我尝试过的,但我想PDF部分有一个问题:对于循环,在R中批打印多个文件,r,loops,R,Loops,我有5个选项卡文件,分别称为“1.txt”、“2.txt”、“5.txt”。每个文件包含一个名为“x”的列和另一个名为“y”的列 我想应用一个循环,分别从每个文件生成一个绘图,并将绘图重定向到相应的输出pdf文件中,分别称为“1.pdf”、“2.pdf”。。。“5.pdf” 以下是我尝试过的,但我想PDF部分有一个问题: files<-list.files(pattern=".txt") for (input in files){ output<-basename(file.p
files<-list.files(pattern=".txt")
for (input in files){
output<-basename(file.path(input,fsep=".txt")) # input files are in working directory
graph<-read.table(input,header=T)
pdf('output.pdf')
plot(graph$x,graph$y)
dev.off()
}
filesjoran用越来越多的教学术语说的是,您当前的函数将覆盖您的output.pdf
五次。我希望你能自己钓到鱼。您必须将某些内容传递给pdf()
,才能生成五个唯一的文件。像这样的事情可能会有帮助
files <- list.files(pattern=".txt")
for (input in files){
output <- basename(file.path(input,fsep=".txt"))
graph <- read.table(input,header=T)
pdf(paste0("output for ", input,".pdf"))
plot(graph$x,graph$y)
dev.off()
}
文件我不确定您是否建议粘贴,因为我的文件名为“1”、“2”、“3”、“4”、“5”。我举了这些名字作为例子。我的意思是用与相应输入文件相同的前缀命名输出文件。我的建议与特定文件的特定名称无关。它正好是解决这个问题的工具。让我们考虑一下:output
包含您希望重用的输入文件名部分。我们必须将字符值传递给pdf()
以命名文件<代码>粘贴
允许我们将多个字符串组合成一个字符串…几乎就在那里。我尝试了大量的组合。最好的方法是用pdf(paste0(output,.pdf”)
替换,它生成文件,但“.txt”扩展名仍然存在(“1.txt.pdf”)。我试图修改file.path
函数,但没有任何更改。它还返回read.table(input,header=T)中的错误:列数多于列名
。还尝试了使用paste
而不是paste0
,但结果相同。但图表是正确的!要删除.txt
请使用:output\u notxt=sub(“.txt”,output)
,它基本上用一个空字符串替换.txt
。@lqdo2000basename
工作正常。它“删除最后一个路径分隔符(如果有)之前的所有路径”。它的文档中没有任何关于删除文件扩展名的内容。@lqdo2000,我同意joran的观点,您需要阅读文档。