首页 > 解决方案 > 使用包时“for”循环在 R 中不起作用

问题描述

我的问题被编辑了,因为我相信我写它的方式让事情变得更加混乱。

我有各种列表,每个列表都用一种颜色命名(黄色、红色、绿色等)。每个列表包含一组基因名称。例如

yellow = c("CCR1", "CD14", "MTOR")
red = c("IL6", "CXCL8")

这些基因可以在enrichR包中查询。例如,该代码yellow_enrich<- enrichr(yellow, databases = "KEGG_2019_Human")在 KEGG 数据库中查询“黄色”列表中的名称,并且运行良好。

> yellow_enrich <- enrichr(yellow, databases = "KEGG_2019_Human")
Uploading data to Enrichr... Done.
  Querying KEGG_2019_Human... Done.
Parsing results... Done.
> yellow_enrich
$KEGG_2019_Human
                                                    Term Overlap
1                             Osteoclast differentiation  17/127
2                        Staphylococcus aureus infection   14/68
3                                              Phagosome  16/152
4                                           Tuberculosis  15/179

因为我有很多列表,所以我尝试创建一个循环来查询每种颜色并将其存储在环境中。

for(i in uniquemods){assign(paste0(i,"_enrich"), enrichr(i, databases = "KEGG_2019_Human"))}

在这里,“uniquemods”是我所有颜色的列表。这段代码应该给我命名为“颜色丰富”的对象以及enrichR查询的输出。例如,uniquemods = c("red", "yellow")。从这个循环中出来的“yellow_enrich”看起来像这样:

$KEGG_2019_Human
[1] Term                 Overlap              P.value             
[4] Adjusted.P.value     Old.P.value          Old.Adjusted.P.value
[7] Odds.Ratio           Combined.Score       Genes               
<0 rows> (or 0-length row.names)

所以我不确定为什么会有所不同。也许它正在查询“黄色”而不是黄色列表中的名称?我该如何解决?

标签: rfor-loop

解决方案


从它的帮助页面上?enrichr说它接受一个字符向量并返回一个数据帧列表。所以这样的事情应该有效。

library(enrichR)
uniquemods <- c('yellow', 'green', 'red')

result <- lapply(mget(uniquemods), function(x) 
                 enrichr(x, databases = "KEGG_2019_Human")[[1]])
names(result) <- paste0(names(result), '_enrich')
list2env(result, .GlobalEnv)

推荐阅读