Я создал скрипт для чтения 15 файлов данных, вычисляя разницу между двумя файлами и записывая результаты в 5 разных файлов. Эти 5 файлов - это матрицы, значения 10x259. Мне нужно создать матрицу, в которой каждый элемент будет средним по элементам в том же положении в предыдущих 5 матрицах. Я не могу усреднить работу.-Чтобы вычислить среднее значение для 2D-матрицы в цикле
Я пробовал классический способ «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
}
Я предполагаю, что матрицы имеют действительно 10 строк и 259 столбцов, а не наоборот. – mra68
Я изменил решение таким образом, что «file1» , «file2» и «file3» - 259x11-матрицы. – mra68