Unlist 给我一个比预期更长的矢量

Unlist gives me a longer vector than expected

我正在执行 RNA-seq 分析,我需要一个逻辑向量,但是我从一个名为 hk 的 SimpleLogicalList 开始,它有 58037 个元素,我从 hk <- features.info$symbol %in% house_keeping_genes 获得,其中 [=14] =] 是数据框,house_keeping_genes 是向量。

使用 unlist(hk) 后,检索到 58731 个元素。然后我意识到列表的某些部分包含两个以上的元素(而不是仅 FALSE,它包含 FALSE FALSE FALSE,从而增加了长度结果。

然后我只使用了 unlist(unique(hk)) 并且大部分意外变量都被删除了,但是仍然有 58041 个元素而不是 58037,我不知道它们来自哪里。我检查了一下,没有生成 NA

我该怎么做才能找到这 4 个额外元素的来源?

> dput(hk[60:70])
new("SimpleLogicalList", elementType = "logical", elementMetadata = NULL, 
    metadata = list(), listData = list(ENSG00000004777 = FALSE, 
        ENSG00000004779 = FALSE, ENSG00000004799 = FALSE, ENSG00000004809 = FALSE, 
        ENSG00000004838 = FALSE, ENSG00000004846 = FALSE, ENSG00000004848 = FALSE, 
        ENSG00000004864 = FALSE, ENSG00000004866 = c(FALSE, FALSE, 
        FALSE), ENSG00000004897 = TRUE, ENSG00000004939 = FALSE))

> dput(features.info$symbol[1:5])
new("SimpleCharacterList", elementType = "character", elementMetadata = NULL, 
    metadata = list(), listData = list(ENSG00000000003 = "TSPAN6", 
        ENSG00000000005 = "TNMD", ENSG00000000419 = "DPM1", ENSG00000000457 = "SCYL3", 
        ENSG00000000460 = "C1orf112"))

> dput(house_keeping_genes[1:5])
c("DPM1", "SCYL3", "GCLC", "BAD", "LAP3")

编辑:我需要逻辑向量来将其用作 RUVg() 的参数 函数,如果我写 hk,则会检索到错误:> Error in Ycenter[, cIdx] : invalid subscript type 'S4'.

套餐:

other attached packages:
 [1] NCmisc_1.1.6                RUVSeq_1.28.0               EDASeq_2.28.0               ShortRead_1.52.0           
 [5] GenomicAlignments_1.30.0    Rsamtools_2.10.0            Biostrings_2.62.0           XVector_0.34.0             
 [9] snpStats_1.44.0             Matrix_1.4-0                survival_3.2-13             sva_3.42.0                 
[13] BiocParallel_1.28.3         genefilter_1.76.0           mgcv_1.8-38                 nlme_3.1-153               
[17] pheatmap_1.0.12             ggfortify_0.4.14            ggplot2_3.3.5               edgeR_3.36.0               
[21] limma_3.50.0                dplyr_1.0.7                 SummarizedExperiment_1.24.0 GenomicRanges_1.46.1       
[25] GenomeInfoDb_1.30.0         IRanges_2.28.0              S4Vectors_0.32.3            MatrixGenerics_1.6.0       
[29] matrixStats_0.61.0          tweeDEseqCountData_1.32.0   Biobase_2.54.0              BiocGenerics_0.40.0        

问题是某些 symbol(这是一个 SimpleLogicalList)包含多个元素,因此我们用 sapply 遍历 list , 如果 list 元素中的任何元素存在 %in% 'house_keeping_genes,则用 any which returns 包裹一个 TRUE/FALSE。 \(x)R

最新版本中表示 lambda 函数 (function(x)) 的简洁方式
hk1 <- sapply(features.info$symbol, \(x) 
         any(x %in% house_keeping_genes, na.rm = TRUE))