我想在大型二维数组(x
)中找到最接近my.array
的值并返回i和j索引,其中i是[1:175]
,j是[1:120]
。
x <- 1.863
my.array <- array(rnorm(21000), dim=c(175,120))
在搜索堆栈溢出和其他站点时,我发现我可以找到最近的值,如下所示:
nearest <- which.min(abs(my.array - x))
然而,这会返回单个定位符值,而我想返回i和j索引值。
> nearest
[1] 13229
提前致谢。
答案 0 :(得分:4)
help(which.min)
说,靠近底部:
... 如果需要数组/矩阵索引而不是1D向量索引,请使用arrayInd()。
啊哈!好吧:
# make the example reproducible
set.seed(123)
x <- 1.863
my.array <- array(rnorm(21000), dim=c(175,120))
nearest <- which.min(abs(my.array - x))
idx <- arrayInd(nearest, .dim=dim(my.array))
idx
[,1] [,2] [1,] 46 62
没有必要删除未使用的尺寸,但它让我不会感到困惑,所以我这样做了。如果您跳过drop()
语句,该示例的工作方式相同。
# drop unused dimensions:
idx <- drop(idx)
idx
[1] 46 62
# check:
my.array[idx[1], idx[2]]
[1] 1.863453