誰でもRで絶対値でベクトルをソートする方法を知っていますので、(-2, 3, 1) -> (1, -2, 3)
などですか?絶対値で並べ替え
もし私がPythonでやっていたら、すべての値と記号のペアを作成し、絶対値でペアのリストをソートして符号を再適用しますが、Rにはとても新しいので、分かりませんこれを行う方法。
Arunのメソッド@乾杯
誰でもRで絶対値でベクトルをソートする方法を知っていますので、(-2, 3, 1) -> (1, -2, 3)
などですか?絶対値で並べ替え
もし私がPythonでやっていたら、すべての値と記号のペアを作成し、絶対値でペアのリストをソートして符号を再適用しますが、Rにはとても新しいので、分かりませんこれを行う方法。
Arunのメソッド@乾杯
はTRTです:
v
をソートするベクトルである
v[order(abs(v))]
。
注:これはv
と同じサイズの新しいベクトルabs(v)
を作成
(sort #'< v :key #'abs)
やPython:v.sort(key=abs)
などのように、R
、 で回避できないとは思いません。N
回だけで、N*log(N)
回ではなく、キーが安くない場合には(abs
とは異なります)呼び出されるため、メモリを失うことはありません。または構造フィールド)。abs(v)
はすぐにガベージコレクションされますが、その割り当て(および、特にgarbage collection)は大きなベクトルの場合には高価であり、メモリが逼迫している場合は実際に問題になることがあります。参照:
しかし、そのベクトルは一時的ですね。 –
@Carlソートするには?それも可能ですか? –
@KonradRudolph間違った用語を使用した可能性があります - ベクトルabs(v)が親環境になく、次のガベージコレクションで消えてしまうのは本当ですか?したがって、ピークRAMに影響する可能性がありますが、永続的ではありません。 –
私はそれにベクトルを渡すことができるようにそれは便利な機能で、これをパッケージ化することが判明、 0のようなorder
の関数で他のオプションを使うオプションがあるように。これは基本的にthe existing answerに基づいています。例えば
sort_abs <- function(x, na.last = TRUE, decreasing = FALSE) {
x[order(abs(x), na.last = na.last, decreasing = decreasing)]
}
、
> sort_abs(c(-1,NA,2,-2))
[1] -1 2 -2 NA
> sort_abs(c(-1,NA,2,-2), decreasing = TRUE, na.last = FALSE)
[1] NA 2 -2 -1
'のX [順序(ABS(X))]'? – Arun
ちなみに、Pythonでは、ペアを作成するのではなく、 'x.sort(key = abs)'を行う方が簡単です –
ありがとう! –