如何解决plyr 的 ldply 改变了 read_xml 的行为
我试图从一堆 xml 文件中的每一个中读取几个字段。我写了一个小函数来提取我需要的字段并将它们作为向量返回:
id_dir <- function(d) {
xml <- read_xml(d)
id <- xml_text(xml_node(xml,'AwardID'))
dir <- xml_text(xml_node(xml,'Abbreviation'))
phone <- xml_text(xml_node(xml,'PhoneNumber'))
return(c(id,phone,dir))
}
但是当我用 ldply
包装它时会发生以下情况:
setwd('xmls/2017')
files <- list.files()[1:100]
sev_data <- plyr::ldply(files,id_dir)
Error in read_xml.character(d) : xmlParseEntityRef: no name [68]
尽管以下代码按预期工作,但仍会发生这种情况:
id_dir(glue('xmls/2017/{files[1]}'))
"1700003" "5746317432" "MPS"
我已经尝试在 SO 周围闲逛了一段时间,但大多数时候我看到人们在谈论 PHP 和很可能不相关的东西。
解决方法
您的函数按预期工作,这可以通过您分享的示例进行验证。
id_dir('https://raw.githubusercontent.com/jdollman/stackoverflow/data/1700229.xml')
#[1] "1700229" "8659743466" "MPS"
id_dir('https://raw.githubusercontent.com/jdollman/stackoverflow/data/1715157.xml')
#[1] "1715157" "5705773510" "BIO"
所以问题在于您如何将文件传递给函数 id_dir
。我不使用 plyr
,因为它早已停用并替换为 dplyr
。我只想在这里使用 lapply
。
另一个问题可能是您的目录中有其他不是 xml
的文件。您可以在 list.files
中指定仅选择 'xml'
文件。试试:
setwd('xmls/2017')
files <- list.files(pattern = '\\.xml$')[1:100]
sev_data <- lapply(files,id_dir)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。