У меня есть два трехмерных массива, и я хочу рассчитать некоторую статистику по ним. Пока я работаю только с одной переменной, я знаю, как это сделать. Например, чтобы вычислить среднее по первой размерности, я использую следующее:Как подать два массива в заявку
obs<-array(1:8,c(2,2,2));
mod<-array(9:2,c(2,2,2));
meanObs <- apply(obs,c(2,3),mean) # mean of observation
meanMod <- apply(mod,c(2,3),mean) # mean od model simulation/forecast
Однако, я не знаю, как кормить два нарезанный массив в применить. Например, я пытаюсь вычислить коэффициент корреляции по первому размеру. Я могу сделать это с помощью следующих функций цикла:
pearsonCor<-matrix(, nrow = dim(obs)[2], ncol = dim(obs)[3])
for (i in 1:dim(obs)[2]){
for (j in 1:dim(obs)[3]){
pearsonCor[i,j]<-tryCatch(suppressWarnings(cor(obs[,i,j], mod[,i,j], method = "pearson")),
error=function(cond) {return(NA)})
}
}
результат:
> pearsonCor
[,1] [,2]
[1,] -1 -1
[2,] -1 -1
Но я хочу, чтобы узнать, как справиться с этой ситуацией с помощью apply.Any бы очень признателен. Спасибо,
Похоже, это может быть задача для 'mapply()' –
Вы знаете, как перефразировать это в mapply? – newbie
Просто посмотрев на это, я могу дать 'f <- function (i, j) cor (obs [, i, j], mod [, i, j], method =" pearson "); mapply (f, 1: dim (obs) [2], 1: dim (obs) [3]) - выстрел. Но было бы лучше, если бы вы могли создать небольшой воспроизводимый пример с желаемым результатом. –