我在xml文件中有一个大型蛋白质数据库,我需要从使用R中提取一些信息。数据库由条目组织,其中包含有关我需要提取和格式化的特定蛋白质的信息。
https://www.dropbox.com/s/dq8ir9f22cnfwrz/Sample.xml
我想提取名称,所有类型为“EC”的dbReferences,以及每个条目的序列。到目前为止,我有:
library("XML")
doc <- xmlParse("Sample.xml")
我在考虑使用xpathSApply
函数明确选择要转到的标签,或xmlToDataFrame
函数。我是R的新手,所以我对从哪里开始感到困惑。
答案 0 :(得分:0)
只需从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服务