排序 IRanges 的列表对象以使所有元素减少

Ordering list object of IRanges to get all elements decreasing

我在尝试通过降序对列表元素进行排序时遇到困难...

我有一个 ByPos_Mindex 对象或来自

的 1000 个 IRange 对象 (CG_seqP) 的列表
 C <- vmatchPattern(CG, CPGi_Seq, max.mismatch = 0, with.indels = FALSE)



IRanges object with 27 ranges and 0 metadata columns:
           start       end     width
       <integer> <integer> <integer>
   [1]         1         2         2
   [2]         3         4         2
   [3]         9        10         2
   [4]        27        28         2
   [5]        34        35         2
   ...       ...       ...       ...
  [23]       189       190         2
  [24]       207       208         2
  [25]       212       213         2
  [26]       215       216         2
  [27]       218       219         2

长度(这些 IRanges 中的 1000 个)

然后我将其更改为仅包含起始整数(我想要的)的列表

CG_SeqP <- sapply(C, function(x) sapply(as.vector(x), "[", 1)) 



[[1]]
 [1]   1   3   9  27  34  47  52  56  62  66  68  70  89 110 112
[16] 136 140 146 154 160 163 178 189 207 212 215 218

(其中 1000 个)

当我尝试使用

对元素列表进行排序时出现问题
 CG_SeqP <- sapply(as.vector(CG_SeqP),order, decreasing = TRUE)

我得到一个我认为是行号的列表,所以如果第一个 IRAnge 对象是 27,我得到这个...

CG_SeqP[1]
[[1]]
 [1] 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8
[21]  7  6  5  4  3  2  1

所以减少有效但对我的实际元素列表无效>?

任何建议,提前致谢。

顺序 return 序列的顺序不是向量的实际元素,要提取它让我们看一个玩具示例(我在这里遵循您的想法):

set.seed(1)
alist1 <- list(a = sample(1:100, 30))

因此,如果您使用当前种子值打印 alist1,您将得到以下结果:

> alist1
$a
 [1] 99 51 67 59 23 25 69 43 17 68 10 77 55 49 29 39 93 16 44
[20]  7 96 92 80 94 34 97 66 31  5 24

现在要对它们进行排序,您可以使用 sort 函数,也可以使用 ordersort 只是对数据进行排序,而 order 只是 return 订单号排序序列中的元素。它不是 return 实际序列,而是 return 位置。因此,我们需要使用方括号将这些位置放在实际向量中以获得正确的排序结果。

lapply(as.vector(alist1),function(x)x[order(x, decreasing = TRUE)])

我使用 lapply 而不是 sapply 只是为了将结果强制执行为列表。您可以根据需要自由选择任何命令

会 return:

#> lapply(as.vector(alist1),function(x)x[order(x, decreasing = TRUE)])
#$a
# [1] 99 97 96 94 93 92 80 77 69 68 67 66 59 55 51 49 44 43 39
#[20] 34 31 29 25 24 23 17 16 10  7  5

我希望这能澄清你的疑问。谢谢