在R.中使用两个数组
array1[x,y]
array2[x,y,t]
我想计算一个array3[x,y],它包含定义array2和array1之间最小差的t索引。这些数组是从netcdf文件中读取的。最好避免循环。如有任何帮助/见解,我们将不胜感激。
循环示例可能类似于:
for i in 1:nx {
for j in 1:ny {
for k in 1:nt {
mindiff[i,j,k] = array1[i,j]-array2[i,j,k]
}
#the minimum values over the k dimension
result[i,j] = sapply(mindiff, 3, min)
}
}
是否希望结果[i,j]是k的索引值,而不是实际的最小值?
这将为您提供每个的最小差异
library("plyr")
library("matrixStats")
result <- t(laply(1:(dim(array1)[2]), function(j) rowMins(array1[, j, ] - array2[, j])))
如果你想要最小的绝对差值,你需要使用abs
。
对于每个的索引,你需要再嵌套一个laply并使用which.min:
library("plyr")
result <- laply(1:nrow(array2),
function(i) laply(1:ncol(array2),
function(j) which.min(abs(array1[i, j, ] - array2[i, j]))
))