如何在函数中使用getNodeSet(XML包)?

问题描述 投票:0回答:1

我正在尝试开发一个脚本来从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(“xtract”,list(compounds))

很明显,getNodeSet没有工作,即没有数据要提取。如果我使用

xtract(102.91_1180.5732m/z)

我得到:错误:“xtract(102.91_”)中的意外输入任何人都可以帮助解决此问题?

r xml function xpath
1个回答
0
投票

在功能中它应该是

idNodes <- getNodeSet(doc, paste0("//compound[@identifier='",id,"']"))

然后以下调用将起作用

xtract('102.91_1180.5732m/z')
© www.soinside.com 2019 - 2024. All rights reserved.