2016-10-04 40 views
2

我想找到最接近的值到x在一个大的二维阵列(my.array)并返回的i和j的索引,其中i是[1:175]和j是[1:120]R:在大阵列查找最接近的值,并返回尺寸

x <- 1.863 
my.array <- array(rnorm(21000), dim=c(175,120)) 

在在堆栈溢出和其他网站上进行搜索,我发现我能找到像这样的最接近的值:

nearest <- which.min(abs(my.array - x)) 

然而,这返回一个定位器值,而我想返回我和j指数值。

> nearest 
[1] 13229 

在此先感谢。

回答

4

help(which.min)

说,接近底部:

... 使用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