有誰知道如何用絕對值排序R中的矢量,所以(-2, 3, 1) -> (1, -2, 3)
等?按絕對值排序
如果我在python中創建它,我會創建一對每個值和它的符號,按絕對值排序對的列表,然後重新應用符號,但我對R很新,所以不知道這個怎麼做。
乾杯
有誰知道如何用絕對值排序R中的矢量,所以(-2, 3, 1) -> (1, -2, 3)
等?按絕對值排序
如果我在python中創建它,我會創建一對每個值和它的符號,按絕對值排序對的列表,然後重新應用符號,但我對R很新,所以不知道這個怎麼做。
乾杯
@ Arun的方法是TRT:
v[order(abs(v))]
其中v
是向量進行排序。
注:
v
新向量abs(v)
。 這不是很有記憶效率,但我不認爲這可以在R
, 中像在Lisp:(sort #'< v :key #'abs)
或Python:v.sort(key=abs)
中所做的那樣避免。N
次,而不是N*log(N)
次,這在密鑰不便宜時特別重要(不像abs
或結構字段)。abs(v)
很快就會被垃圾收集,但是它的分配(尤其是garbage collection)對於大型矢量而言是昂貴的,並且如果內存很緊,可能會出現問題。參見:
但那個矢量是短暫的,不是嗎? –
@Carl用於排序?這甚至有可能嗎? –
@KonradRudolph我可能使用了錯誤的術語 - 矢量「abs(v)」不在父環境中並且在下一次垃圾收集時會消失?所以它可能會影響峯值RAM,但不會是永久性的。 –
我發現它有用的功能包,這樣我可以通過一個載體來了,也可以在order
函數中使用其他選項,如decreasing
。它基本上基於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
'×〔順序(ABS(X))]'? – Arun
順便說一下,在Python中,執行'x.sort(key = abs)'而不是創建對 –
非常感謝! –