【发布时间】:2014-08-20 07:47:37
【问题描述】:
这是一个非常琐碎的问题,所以我希望有人能在这里帮助我。
我有两个列表,我想根据另一个列表中的值对一个列表进行子集化。
> head(islands)
RleViewsList of length 6
names(6): chr1 chr2 chr3 chr4 chr5 chr6
> head(islands$chr1)
Views on a 249250621-length Rle subject
views:
start end width
[1] 10001 10104 104 [ 1 2 3 3 4 4 5 6 7 7 8 8 9 10 11 11 12 ...]
[2] 10109 10145 37 [ 1 2 2 3 3 4 5 6 6 7 7 8 9 10 10 11 11 ...]
[3] 10149 10176 28 [1 1 2 3 4 4 5 5 5 6 7 7 7 7 7 7 7 7 7 7 7 5 4 4 4 ...]
[4] 10178 10229 52 [ 1 1 2 3 4 4 5 5 6 7 8 8 9 9 10 11 12 ...]
[5] 10256 10286 31 [1 2 2 3 3 4 5 6 6 7 7 7 8 9 9 9 9 9 8 7 7 7 7 7 5 ...]
[6] 10332 10388 57 [ 1 1 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 ...]
> names(islandsums)
[1] "chr1" "chr2" "chr3" "chr4" "chr5" "chr6" "chr7" "chr8" "chr9"
[10] "chr10" "chr11" "chr12" "chr13" "chr14" "chr15" "chr16" "chr17" "chr18"
[19] "chr19" "chr20" "chr21" "chr22" "chrM" "chrX" "chrY"
> head(islandsums$chr1)
[1] 1198 259 140 472 176 298
> length(islandsums)
[1] 25
> length(islandsums$chr1)
[1] 288625
> length(islands)
[1] 25
> length(islands$chr1)
[1] 288625
如果我在一个列表项上手动执行此操作,一切都会按我的预期进行:
> head(islands$chr1[islandsums$chr1>1000])
Views on a 249250621-length Rle subject
views:
start end width
[1] 10001 10104 104 [ 1 2 3 3 4 4 5 6 7 7 8 8 9 10 11 11 ...]
[2] 50482 50514 33 [ 3 14 17 28 29 39 40 49 51 59 60 64 65 66 66 66 ...]
[3] 74555 74633 79 [ 1 3 3 11 14 26 42 56 82 130 159 176 ...]
[4] 74908 74957 50 [76 76 76 76 76 76 76 76 76 76 76 76 77 77 77 77 ...]
[5] 109573 109615 43 [ 1 1 1 4 15 18 29 32 43 46 57 60 ...]
[6] 121455 121529 75 [ 1 1 1 1 1 4 4 4 4 4 4 5 5 6 11 11 ...]
但是如果我尝试使用 lapply 将它应用到列表中,它就不起作用了。
> head(lapply(islands, function(x) islands$x[islandsums$x>1000]))
$chr1
NULL
$chr2
NULL
$chr3
NULL
$chr4
NULL
$chr5
NULL
$chr6
NULL
两者都没有,尽管它给出了不同的结果。
> head(lapply(islands, function(x) x[islandsums$x>1000]))
$chr1
Views on a 249250621-length Rle subject
views: NONE
$chr2
Views on a 243199373-length Rle subject
views: NONE
$chr3
Views on a 198022430-length Rle subject
views: NONE
$chr4
Views on a 191154276-length Rle subject
views: NONE
$chr5
Views on a 180915260-length Rle subject
views: NONE
$chr6
Views on a 171115067-length Rle subject
views: NONE
【问题讨论】:
-
检查这是否有效
lapply(seq_along(islands), function(i) islands[[i]][islandsums[[i]]>1000])或者可能是mapply(未测试)最好显示一个使用dput进行测试的小型可重现示例。 -
谢谢,这确实有效。我不完全明白为什么。
-
我更新了一个例子。希望对你有帮助
-
看起来您正在使用 Granges 对象,尝试使用 subsetByOverlaps?