1

3 つのテキスト ファイルがあります。以下に示すようにいくつかの計算を行い、結果をプロットしたいと思います。すべてのテキスト ファイルには、X1 から X14 までの 14 列と 601 行が含まれます。このコードは基本的に、3 つのファイルすべてから 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 個のプロットが得られます。

4

2 に答える 2

2

1から14までを取得するには、関数Xiと、リスト内の要素を取得する別の方法を使用する必要があります:代わりにipasteref[["X3"]]ref$X3

それはあなたの例を与えます:

for (i in 1:14){
        name <- paste('X',i,sep='')
        result1 = (mean(ref[[name]]) - ((sd(ref[[name]])/sd(sour1[[name]]))*mean(sour1[[name]]))+ ((sd(ref[[name]])/sd(sour1[[name]])*sour1[[name]]))) # calculate using ref and sour1
        result2 = ((mean(ref[[name]]) - ((sd(ref[[name]])/sd(sour2[[name]],na.rm=TRUE))*mean(sour2[[name]],na.rm=TRUE))+((sd(ref[[name]])/sd(sour2[[name]],na.rm=TRUE)*sour2[[name]]))))  # calculate using ref and sour2
        plot(ref[[name]],result1,ylab="Weight in pounds",xlab="Weight in pounds",col=2)
        points(ref[[name]],ref$X1, col = 'green')
        points(ref[[name]],result2, col = 'blue')
}
于 2013-03-13T11:46:31.327 に答える
2

Popが述べたように、列名のリストを作成し、それらをループする必要があります。

lapplyforループの代わりに、少しエレガントな方法を提供します。

result1コードをより明確にレイアウトすることで、とを割り当てる行に奇妙な二重括弧があることがわかりますresult2。明確にするために、これらの線をより小さな計算に分割することを検討してください。

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') 
  }
)
于 2013-03-13T11:59:38.740 に答える