我有三个文本文件。我想做一些如下所示的计算并绘制结果。 所有文本文件包含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个图。
答案 0 :(得分:2)
要让Xi
的{{1}}从1到14,您必须使用i
函数以及在列表中获取元素的替代方法:paste
ref[["X3"]]
它给出了你的例子:
ref$X3
答案 1 :(得分:2)
正如Pop所提到的,你需要创建一个列名列表并循环遍历这些列名。
lapply
为for
循环提供了一种更优雅的替代方案。
通过更清楚地列出您的代码,您可以看到在分配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')
}
)