【发布时间】:2015-11-18 05:29:20
【问题描述】:
我正在尝试使用 R 创建一个表,将所有 KEGG 直系 ID 链接到所有相关的 Entrez 基因。理论上,这可以使用 bioconductor 的 KEGGREST 包来完成。
我有一个所有 KEGG 正交 ID 的列表,ko_nums,我想使用函数 keggConv 将其转换为 Entrez ID。首先我尝试了lapply,但这是一个问题,因为url查询太长了:
library(KEGGREST)
lapply(ko_nums,keggLink("genes",ko_nums))
Error in .get Url: (414) Request-URI Too Long
所以这不适用于像我这样大的查询。我尝试使用以下方法扩展列表并一次查询一个:
output = apply(expand.grid(ko_nums),1,
function(x,y) keggLink("genes",x[1]))
但是如果你用玩具来做这个
ko_nums = c("ko:K00001","ko:K00002","ko:K00003")
output = apply(expand.grid(ko_nums),1,
function(x,y) keggLink("genes",x[1]))
output
您会看到我的输出是一个包含三个的列表,其中每个直系 ID 都有许多基因。我想在数据表中保留每个基因与其各自的直系编号配对,但是 a) 将其包装在“unlist”函数中会删除所有 ko 标识符,并且 b) 我不能用列表创建数据框,因为每一行都有不同数量的元素。
有没有办法从这个列表中制作一个两列表,其中 ko 数字被分成单独的直系/基因对?像这样:
ko:K00001 gene_1
ko:k00001 gene_2
ko:K00001 gene_3
ko:K00002 gene_4
ko:K00002 gene_5
ko:K00002 gene_6
等等
【问题讨论】:
-
您最初的尝试,
lapply(ko_nums,keggLink("genes",ko_nums))并没有按照您的想法进行;尝试lapply(ko_nums, keggLink, target="genes")或更好,将ko_nums拆分成块。如果您需要更多帮助,请让您的示例可重现(通过提供有效ko_nums的短向量)。 -
我提供了一个玩具,其中 'ko_nums = c("ko:K00001","ko:K00002","ko:K00003")'。实际上,最初的尝试确实适用于这个子集,返回一个包含三个的列表。我认为这是因为此查询的 url 长度在 R KEGGREST 中是可以接受的。拆分 ko_nums 变量肯定会起作用,但我无法相信没有办法在 R 中保留列表属性以保存在向量或数据框中,正如我在所需的输出中所指出的那样。我尝试使用 'lapply(ko_nums, keggLink, target="genes")',但收到“下标越界”错误消息。
标签: r list bioconductor