如何在函数中使用getNodeSet(XML包)?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在函数中使用getNodeSet(XML包)?相关的知识,希望对你有一定的参考价值。
我正在尝试开发一个脚本来从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_”)中的意外输入任何人都可以帮助解决此问题?
答案
在功能中它应该是
idNodes <- getNodeSet(doc, paste0("//compound[@identifier='",id,"']"))
然后以下调用将起作用
xtract('102.91_1180.5732m/z')
以上是关于如何在函数中使用getNodeSet(XML包)?的主要内容,如果未能解决你的问题,请参考以下文章
使用 XML / RCurl R 包解析 HTML 表,而不使用 readHTMLTable 函数