我正在尝试开发一个脚本来从xml文件中提取信息。在解析XML文件后,我使用
idNodes <- getNodeSet(doc, "//compound[@identifier='101.37_1176.0998m/z']")
对文档的特定部分进行子集化,然后使用诸如
之类的行提取我需要的信息subject <- sapply(idNodes, xpathSApply, path = './condition/sample', function(x) xmlAttrs(x)['name'])
我的xml文件有数百个101.37_1176.0998m / z类型的标识符 不可能一次加载所有标识符所以我需要使用getNodeSet然后数据提取来遍历文件
如果我手动输入标识符,我的脚本可以正常工作,即
idNodes <- getNodeSet(doc, "//compound[@identifier='101.37_1176.0998m/z']")
但是我想写一个函数,所以我可以使用do.call来传递一个标识符列表。
我试过了
xtract <- function(id){
idNodes <- getNodeSet(doc, "//compound[@identifier='id']")}
但是当我使用这个功能时,即
xtract('102.91_1180.5732m/z')
或
compounds <- c("101.37_1176.0998m/z", "102.91_1180.5732m/z")
do.call(&#34; xtract&#34;,list(compound))
很明显getNodeSet没有工作,即没有数据要提取。 如果我使用
xtract(102.91_1180.5732m/z)
我得到:错误:&#34; xtract中的意外输入(102.91 _&#34; 任何人都可以帮助解决这个问题吗?
答案 0 :(得分:0)
在功能中它应该是
idNodes <- getNodeSet(doc, paste0("//compound[@identifier='",id,"']"))
然后以下调用将起作用
xtract('102.91_1180.5732m/z')