R:在大数组中查找最接近的值并返回维

时间:2016-10-04 03:00:51

标签: arrays r

我想在大型二维数组(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

提前致谢。

1 个答案:

答案 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