【发布时间】:2016-07-19 14:44:07
【问题描述】:
背景:我正在研究基因和本体,但我的问题涉及 R 脚本编写。
我想用从数据库中提取的相应术语替换我的数据框中的 GO:ID。
所以,这是我的源数据框。它是一个基因列表 (v1) 和相关的 GO:ID (v2):
>gene_list_and_Go_ID
V1 V2
2563 Gene1 GO:0003871, GO:0008270, GO:0008652, GO:0009086
2580 Gene2 GO:0003871, GO:0008270, GO:0008652, GO:0009086
12686 Gene3 GO:0003871, GO:0008270, GO:0008652, GO:0009086
14523 Gene4 GO:0004489, GO:0006555, GO:0055114
对数据库的请求看起来很简单:
>select(GO.db, my_Go_id, "TERM", "GOID")
我尝试了以下几行手动寻址数据库,效果很好:
>my_Go_id = unlist(strsplit("GO:0008270, GO:0008652, GO:0009086", split=", "))
>select(GO.db, my_Go_id, "TERM", "GOID")
GOID TERM
1 GO:0008270 zinc ion binding
2 GO:0008652 cellular amino acid biosynthetic process
3 GO:0009086 methionine biosynthetic process
我的问题:我不能让这个过程自动化! 准确地说,对于每一行,我需要将每个字符串从我的数据框中的第 n°2 列转换为一个向量,以便质疑数据库。 然后我需要将数据框中的 GO:ID 替换为请求的结果。
1/ 首先,我尝试将“unlist”函数放在“apply”函数中到我的数据框:
apply(gene_list_and_Go_ID,1,unlist(strsplit(gene_list_and_Go_ID[,2], split=", ")))
我明白了:
Error in strsplit(ok, split = ", ") : non-character argument
2/ 那么,我可以在apply函数中也将请求添加到数据库中吗?
3/ 最后,我不知道如何将第 2 列替换为数据库请求的结果。
这是一个例外的“理想”结果示例:
V1 V2
2563 Gene1 GOID TERM
1 GO:0008270 zinc ion binding
2 GO:0008652 cellular amino acid biosynthetic process
3 GO:0009086 methionine biosynthetic process
感谢您的帮助。
【问题讨论】:
标签: r dataframe apply strsplit