按绝对值排序

kez*_*smc 7 sorting r

有谁知道如何用R绝对值对矢量进行排序,(-2, 3, 1) -> (1, -2, 3)等等?

如果我在python中这样做,我会创建一对每个值及其符号,按绝对值对对列表进行排序然后重新应用符号,但我对R很新,所以不知道如何做到这一点.

干杯

sds*_*sds 9

@ Arun的方法是TRT:

v[order(abs(v))]
Run Code Online (Sandbox Code Playgroud)

v要排序的向量在哪里.

笔记:

  • 这将创建一个abs(v)大小相同的新矢量v.这不是非常节省内存,但我不认为这可以避免R,例如,在Lisp:(sort #'< v :key #'abs)或Python中完成:v.sort(key=abs).
  • 这个临时矢量分配不一定是坏事:你确实会丢失内存,但是你赢得时间是因为访问者密钥只被调用N次数,而不是N*log(N)时间,这在密钥不便宜时(与abs结构字段不同)尤为重要.
  • 更确切地说,向量abs(v)很快就会被垃圾收集,但是它的分配(尤其是垃圾收集)对于大型向量来说是昂贵的,并且如果内存紧张则可能实际上存在问题.

也可以看看: