-1

ベクトルがありvます。v 1e-2 未満のベクトルの要素の最小差のインデックスを見つけたいと思います。どうすればインデックスを取得できますか?

    v = c(0.0002873771, 0.0006478544, 0.0092186701, 0.0267084167, 
        0.0457307072 , 0.3176459806)
    D = abs(diff(v)) < 1e-2

インデックス= 1と2ではなく、最小のものであることを取得したい。このベクトルがあれば

    v = c( 0.01144003, 0.04644231, 0.05527114, 0.31680614)
    D = abs(diff(v)) < 1e-2
    index = which.min(abs(diff(v)) < 1e-2 )

それは私にインデックス = = 1 を与えますが、実際には私の欲求インデックスは 1 ではなく 2 です。

4

2 に答える 2

1

最小絶対差が許容値よりも小さいことがわかっている場合、which.minは正しい関数であり、。は必要ありませんD

> which.min(abs(diff(v)))
[1] 1

編集した質問のこのコード:

index = which.min(abs(diff(v)) < 1e-2 )

論理ベクトルのwhich.minを取得しています。あなたが意図したものではありません。これはあなたが(おそらく)望むものです:

v = c( 0.01144003, 0.04644231, 0.05527114, 0.31680614)
> which.min(abs(diff(v)))
[1] 2

any実際に許容誤差を確認するには、とを使用できますif。ここでNAは、すべての違いが許容範囲を超えた場合に返送されることを想定しています。

min.difference.index <- if (any(abs(diff(v)) < 1e-2)) which.min(abs(diff(v))) else NA
于 2012-12-18T02:28:16.560 に答える
0

問題は、差分のプロセスで 1 つの観測が必要になることです。

見る:

length(v) == length(D)
[1] FALSE

と:

length(v) == length(D) + 1
[1] TRUE

したがって、インデックス番号は常に「低すぎる」ものです。これは、短い「差分」オブジェクトの位置を参照しているためです。このベクトルでインデックスを作成する場合は、次を使用します。

v[which.min(abs(diff(v))) + 1]

また:

Idx <- which.min(abs(diff(v))) + 1
v[Idx]
于 2012-12-18T03:14:35.223 に答える