我在尝试通过降低顺序来按元素逐个排序列表时遇到困难...
我有一个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
所以减少有效,但不适用于我的实际元素列表>?
任何建议,谢谢。
答案 0 :(得分:0)
Order返回序列的顺序,而不是向量的实际元素,要提取它,让我们看一个玩具示例(我在这里遵循您的想法):
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
函数对它们进行排序,也可以使用order
,sort
只是对数据进行排序,而order只是返回排序后的元素的顺序号。它不返回实际序列,而是返回位置。因此,我们需要使用方括号将这些位置放在实际向量中,以获得正确的排序结果。
lapply(as.vector(alist1),function(x)x[order(x, decreasing = TRUE)])
我使用lapply
代替sapply
只是为了将结果强制为列表。您可以根据需要自由选择任何命令
会返回:
#> 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
我希望这可以澄清您的疑问。谢谢