【发布时间】:2015-08-26 14:35:23
【问题描述】:
我编写了一个脚本来读取 15 个数据文件,计算每 2 个文件之间的差异并将结果写入 5 个不同的文件。这 5 个文件是矩阵,10x259 值。 我需要创建一个矩阵,其中每个元素将是前 5 个矩阵中相同位置的元素的平均值。我不能做平均工作。
我在循环中尝试了“sum=sum+i”的经典方式,但 R 给出了递归求和的错误。 我尝试制作一个 3 维矩阵并用 5 个包含 2D 矩阵的“页面”填充它,但尝试用另一个大小的内容填充矩阵时出现错误。 我尝试使用 rowMeans(),但无法完成这项工作,因为我需要获取同一变量 5 次迭代的平均值。
我能做到的唯一方法是将所有生成的文件再次读取到单独的变量中,将它们相加并除以 5。但这仅适用于少数文件。我需要扩展到许多文件,所以我需要让它以某种方式循环工作。
谁能给我一个更好的主意?
我是 R 新手。这个脚本可能效率很低,但它只需要完成这项工作。
下面是我的代码:
MAM <- c("M","N","O","P","R")
S <-c("a","b","c","d","e")
T<-c("a","b","c","d","e")
V<-c("a","b","c","d","e")
Min2000<- array(3,dim=c(259,10,5))
Min2010<- array(5,dim=c(259,10,5))
# this will be done 5 times
for (i in 1:5) {
# preparing file names to be read
S[i] <- paste(MAM [i],"2000.txt",sep="_")
T[i] <- paste(MAM [i],"2150.txt",sep="_")
V[i] <- paste(MAM [i],"2250.txt",sep="_")
# import data from the files
file1 <- read.table(S[i], header=TRUE,sep="\t")
file2 <- read.table(T[i], header=TRUE,sep="\t")
file3 <- read.table(V[i], header=TRUE,sep="\t")
# delete the first column
file1[,2:11]
file2[,2:11]
file3[,2:11]
file1a <- file1[,c(2:11)]
file2a <- file2[,c(2:11)]
file3a <- file3[,c(2:11)]
# compute data
Min2000<- (file2a-file1a)/file1a
Min2010<- (file3a-file1a)/file1a
colMeans(Min2000)
#cub[,,i]= Min2000 #doesn'twork
#rowMeans(datamonth, dims = 2) #doesn'twork
}
【问题讨论】: