R将列表取消列表为整数

时间:2014-06-06 15:14:43

标签: r

[修订版]

我在R大小为57241的大字符向量中包含基因符号,例如

基因< - c(“AL627309.1”,“SMIM1”,“DFFB”)#假设这个大小为57241

我有另一张表,其中一列表$基因在每一行中都有一些基因组合,例如

head(table$genes)
[1] ,OR4F5,AL627309.1,OR4F29,OR4F16,AL669831.1,
[2] ,TP73,CCDC27,SMIM1,LRRC47,CEP104,DFFB
..

这个表有大约1400行。对于每个基因,我想找到它所在的表中的行索引。

为此,我使用了

ind <- sapply(gene, grep, table$genes, fixed=TRUE,USE.NAMES=FALSE))

返回的变量“ind”是一个大小为57241的大型列表,看起来像这样

head(ind)
[[1]]
[1] 1

[[2]]
[1] 1

[[3]]
[1] 1

[[4]]
[1] 1

[[5]]
[1] 1

[[6]]
[1] 1

我知道每个基因在该表中只存在一次。所以我感兴趣的数字是上面每行中的列表,即1.如何将其转换为整数向量?当我以某种方式取消列表()时,我得到一个长度为~500000的向量,而我应该得到与列表相同的长度。我尝试过很多功能和组合但似乎没什么用。有什么想法吗?

由于

1 个答案:

答案 0 :(得分:2)

我无法使用列表或数据框重现该行为:

> gene <- c("AL627309.1","SMIM1","DFFB") 
> 
> table <- list(genes =c(",OR4F5,AL627309.1,OR4F29,OR4F16,AL669831.1,", 
                         ",TP73,CCDC27,SMIM1,LRRC47,CEP104,DFFB"))
> (ind <- sapply(gene, grep, table$genes, fixed=TRUE,USE.NAMES=FALSE))
[1] 1 2 2

我想过你应该使用match,但经过进一步的考虑后,似乎你的数据结构肯定会有所不同。尝试发布dput(head (table$gene))dput(gene)以使您的问题可以重现。你也应该停止使用&#34; list&#34;引用该表中$项目的项目。它使R的常规用户感到困惑,他们认为你在谈论R&#34;列表&#34;。您可以尝试查看ind&#34; list&#34;中的哪些项目。有一个长度大于1的向量:

 which(sapply(ind, length) > 1)