2016-10-04 41 views
2

私は大規模な2次元配列(my.array)にxに最も近い値を見つけたいと私は[1:175]あり、jは[1:120]でiとjのインデックスを返したいです。スタックオーバーフローと私はそうのような最も近い値を見つけることができます見つけた他のサイトで検索するには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()、あなたが代わりに1次元ベクトルのものの配列/行列インデックスが必要な場合。

Aha!それでは:未使用のディメンションを削除

# 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 
関連する問題