r - 使用包时“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)
所以我不确定为什么会有所不同。也许它正在查询“黄色”而不是黄色列表中的名称?我该如何解决?
解决方案
从它的帮助页面上?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)
推荐阅读
- typo3 - TYPO3 EXT:form TypoScript 在所有表单中通过其标识符覆盖字段
- pandas - 如何使用 python 在数据框中选择包含某些特定值的行?
- libgdx - 尽管在 libgdx 项目中未调用该方法,但如何使用该方法
- sql - 返回不在前两个列表中的元素列表
- sql - Oracle SQL if 语句基于通过 .sh 脚本传入的参数
- php - 你能告诉我这个表格在做什么吗?
- python - 如何在python中自动创建票证
- c# - Parallel.ForEach(...) 的 CPU 使用率低
- sql - 如何解决别名中的此 SQL 查询标识符错误?
- java - DAO 设计用于更新数据库中的实体