仅当文件名在R中匹配时才循环

时间:2014-12-03 21:26:37

标签: r loops arguments

在我的目录中,我有名为:

的文件

file1.a file2.a file3.a

file1.b file2.b file3.b

我想根据文件的名称绘制文件图形(例如:file1.a和file1.b; file2.a和file2.b ...等)。我在R中使用for循环如下:

     for (input1 in a_files){
     for (input2 in b_files){ 
    graph1<-read.table(input1, header=T, sep="\t")
    graph2<-read.table(input2, header=T, sep="\t")
    png(paste("header", input1, input2, ".png"))
    plot(graph1,graph2, type="l", col=c("darkred", "darkblue"), lwd=5)
    dev.off()
    }
    }

虽然生成绘图没有问题,但是图形和文件名的所有组合似乎都被扰乱了。此代码生成如下图形:

file1.a和file2.b. file1.a和file3.b ... etc

但是,我想仅在文件名匹配时才绘制它们(file1.a和file1.b ...等)。参数函数说什么&#34;如果文件名匹配,则为文件夹中的每个文件绘制这些图形&#34;?

2 个答案:

答案 0 :(得分:0)

这应该有效:

# File vectors
afiles <- c('file1.a', 'file2.a', 'file3.a')
bfiles <- c('file1.b', 'file2.b', 'file3.b')

# Combine so they match
combofiles <- data.frame(a = afiles, b = bfiles)

# plotting function
plotter <- function(f1) {

  graph1<-read.table(f1['a'], header=T, sep="\t")
  graph2<-read.table(f1['b'], header=T, sep="\t")

  png(paste("header", f1['a'], f1['b'], ".png"))
  plot(graph1,graph2, type="l", col=c("darkred", "darkblue"), lwd=5)
  dev.off()
}

# Apply to each row of combo
apply(combofiles, 1, plotter)

答案 1 :(得分:0)

由于某种原因,上面的代码只绘制了第一个数据集,因此我通过更改&#34;绘图仪功能&#34;找到了解决方案。 as:

plotter <- function(f1) {
      graph1<-read.table(f1['a'], header=T, sep="\t")
      graph2<-read.table(f1['b'], header=T, sep="\t")
      png(paste("header", f1['a'], f1['b'], ".png"))
      plot(graph1, type="l", col=c("darkblue") , lwd=5)
      **lines(graph2, col=c( "darkred"), lwd=5)**
      dev.off()
      }

     apply(combofiles, 1, plotter)

感谢大家的解决方案!