如何循环R中的文本文件?

时间:2013-03-13 11:36:35

标签: r loops

我有三个文本文件。我想做一些如下所示的计算并绘制结果。 所有文本文件包含14列X1到X14和601行。 此代码基本上从所有三个文件中读取X3并进行一些计算,然后返回结果。

   ref= read.table("D:\\ref.txt", sep="",header=TRUE)# read first file
   sour1 = read.table("D:\\sour1.txt", sep="",header=TRUE)# read second file
   sour2= read.table("D:\\sour2.txt", sep="",header=TRUE,na.rm=TRUE)# read third file
  result1 = (mean(ref$X3) - ((sd(ref$X3)/sd(sour1$X3))*mean(sour1$X3))+ ((sd(ref$X3)/sd(sour1$X3)*sour1$X3))) # calculate using ref and sour1
result2 = ((mean(ref$X3) - ((sd(ref$X3)/sd(sour2$X3,na.rm=TRUE))*mean(sour2$X3,na.rm=TRUE))+((sd(ref$X3)/sd(sour2$X3,na.rm=TRUE)*sour2$X3))))  # calculate using ref and sour2
plot(ref$X3,result1,ylab="Weight in pounds",xlab="Weight in pounds",col=2)
points(ref$X3,ref$X3, col = 'green')
points(ref$X3,result2, col = 'blue') # from this I get one plot showing 3 variables on y axis against one on x axis.

这只是从所有数据中使用X3的图,但我还有其他列X1到X14 我的问题是如何对所有其他列做同样的事情,最后将得到14个图。

2 个答案:

答案 0 :(得分:2)

要让Xi的{​​{1}}从1到14,您必须使用i函数以及在列表中获取元素的替代方法:paste ref[["X3"]]

它给出了你的例子:

ref$X3

答案 1 :(得分:2)

正如Pop所提到的,你需要创建一个列名列表并循环遍历这些列名。

lapplyfor循环提供了一种更优雅的替代方案。

通过更清楚地列出您的代码,您可以看到在分配result1result2的行中有一些奇数的双括号。为清晰起见,请考虑将这些线分解为较小的计算。

columns <- paste0("X", 1:14)
lapply(
  columns,
  function(column)
  {
    result1 <- (
      mean(ref[[column]]) - 
      ((sd(ref[[column]]) / sd(sour1[[column]])) * mean(sour1[[column]])) + 
      ((sd(ref[[column]]) / sd(sour1[[column]]) * sour1[[column]]))
    )   # calculate using ref and sour1
    result2 <- ((  
      mean(ref[[column]]) - 
      ((sd(ref[[column]]) / sd(sour2[[column]], na.rm=TRUE)) * mean(sour2[[column]], na.rm=TRUE)) + 
      ((sd(ref[[column]]) / sd(sour2[[column]], na.rm=TRUE) * sour2[[column]])) 
    ))  # calculate using ref and sour2
    plot(
      ref[[column]],
      result1,
      ylab = "Weight in pounds",
      xlab = "Weight in pounds",
      col  = 2
    )
    points(ref[[column]], ref[[column]], col = 'green')
    points(ref[[column]], result2, col = 'blue') 
  }
)