2016-10-04 43 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