我在一个xml文件中有一个大型的蛋白质数据库,我需要从R中提取一些信息。该数据库按条目组织,其中包含我需要提取和格式化的特定蛋白质的信息。
https://www.dropbox.com/s/dq8ir9f22cnfwrz/Sample.xml
我想提取名称,类型为"EC“的所有dbReferences,以及每个条目的序列。到目前为止,我有:
library("XML")
doc <- xmlParse("Sample.xml")我在考虑要么使用xpathSApply函数显式地选择要转到的标记,要么使用xmlToDataFrame函数。我是R的新手,所以我有点困惑,不知道从哪里开始。
发布于 2014-05-28 03:49:54
只需从getNodeSet中选择所需的元素
nd <- getNodeSet(doc, "//ns:entry", namespaces=c(ns=getDefaultNamespace(doc)[[1]]$uri))
y <- data.frame( id = sapply(nd, xpathSApply, './*[local-name()="name"]', xmlValue),
ec = sapply(nd, function(y) paste( xpathSApply(y, './/*[local-name()="dbReference" and @type="EC"]/@id'), collapse="; ")),
sequence = gsub("\n", "", sapply(nd, xpathSApply, './*[local-name()="sequence"]', xmlValue)))
head(y, 3)
id ec sequence
1 AK1C3_HUMAN 1.-.-.-; 1.1.1.357; 1.1.1.112; 1.1.1.188; 1.1.1.239; 1.1.1.64; 1.3.1.20 MDSKHQCVKLNDGHFMPVLGFGTYAPPEVPRSKALEVTKLAIEA...
2 CP3A4_HUMAN 1.14.13.-; 1.14.13.157; 1.14.13.32; 1.14.13.67; 1.14.13.97 MALIPDLAMETWLLLAVSLVLLYLYGTHSHGLFKKLGIPGPTPL...
3 AK1C1_HUMAN 1.1.1.-; 1.1.1.149; 1.1.1.112; 1.3.1.20 MDSKYQCVKLNDGHFMPVLGFGTYAPAEVPKSKALEATKLAIEA...您还可以删除名称空间并简化这些查询...
x <- readLines("Sample.xml")
x[2] <- "<uniprot>"
doc <- xmlParse(x)
nd <- getNodeSet(doc, "//entry")或者使用Uniprot中的Rest服务
http://www.uniprot.org/uniprot/?query=AK1C3_HUMAN+OR+CP3A4_HUMAN+OR+AK1C1_HUMAN&format=tab&columns=entry%20name,ec,sequence
https://stackoverflow.com/questions/23838760
复制相似问题