【发布时间】:2017-10-05 12:59:08
【问题描述】:
我有 155 个元素的列表,eahc 包含 3 个列表。
下面我做了一个小例子。我只对保留gene 中的值感兴趣,并尝试在R 中一次删除每个元素的第一个和第二个列表!只留下基因中的值。
test <- list(name="Adipose", desc= "Roche", gene = c("KRT14", "RPE65"))
test1 <- list(name="muscle", desc= "Roche", gene = c("THRSP", "KRT14"))
test2 <- list(name="WBC" , desc= "Roche", gene = c("RBP4", "CCDC80"))
x <- c(test,test1, test2)
如何实现?
【问题讨论】:
-
x[grepl("gene",names(x))]?你不能简单地做x["gene"],因为它只会拉第一个。如果你能澄清你的数据结构会更有帮助。根据您的描述,在我看来x是一个列表列表,但在您的输出中x只是一个列表 -
@MikeH。不需要
which和grepl:x[names(x) == 'gene']就可以了。 -
如果总是按顺序,
x[c(FALSE, FALSE, TRUE)] -
@MikeH。如果要匹配
gene1:1,则不需要grepl。 -
@MikeH 解决方案有效!但是它在我的数据中是不可重现的,因为真实列表的结构不同,我现在不知道如何制作它。就像
str(list) List of 155 $ Adipose :List of 3 ..$ name : chr "Adipose" ..$ desc : chr "Roche" ..$ genes: chr [1:82] "ACACB" "ACP5" "ACTA1" "ADRB3" ... $ WBC :List of 3 ..$ name : chr "WBC" ..$ desc : chr "Roche" ..$ genes: chr [1:28] "THRSP" "KRT14" "APOB" "LEP" ...我写了这个for ( i in list[[1:155]]) as.list(name=list[[i]][1], gene=list[[i]][3] )没用!