【发布时间】:2016-12-09 23:55:42
【问题描述】:
在堆栈器的一些努力和帮助下,我已经能够解析网页并将其保存为数据框。我想对多个 xml 文件重复相同的操作并 rbind 列表。这是我尝试并成功完成的:
library(XML)
xml.url <- "http://www.ebi.ac.uk/ena/data/view/ERS445758&display=xml"
doc <- xmlParse(xml.url)
x <- xmlToDataFrame(getNodeSet(doc,"//SAMPLE_ATTRIBUTE"))
x$UNITS <- NULL
x_t <- t(x)
x_t <- as.data.frame(x_t)
names(x_t) <- as.matrix(x_t[1, ])
x_t <- x_t[-1, ]
x_t[] <- lapply(x_t, function(x) type.convert(as.character(x)))
以上代码运行良好,现在当我尝试应用一个函数对多个 xml 文件执行相同操作时:
ERS_ID <- c("ERS445758","ERS445759", "ERS445760", "ERS445761", "ERS445762")
xml_url_test = as.vector(sprintf("http://www.ebi.ac.uk/ena/data/view/ERS445758&display=xml",
ERS_ID))
XML_parser <- function(XML_url){
doc <- xmlParse(XML_url)
x <- xmlToDataFrame(getNodeSet(doc,"//SAMPLE_ATTRIBUTE"))
x$UNITS <- NULL
x_t <- t(x)
x_t <- as.data.frame(x_t)
names(x_t) <- as.matrix(x_t[1, ])
x_t <- x_t[-1, ]
x_t[] <- lapply(x_t, function(x) type.convert(as.character(x)))
return(x_t)
}
major_test <- sapply(xml_url_test, XML_parser)
它有效,但给了我一个长列表,该列表与我为单个 XML 文件生成的数据框格式不正确。
最后,我还想在具有来自 ERS_ID 向量的 ERS 编号的最终数据帧中添加一列
函数中的 x_t$ERSid <- ERS_ID 之类的东西
有人可以指出我在函数中缺少什么以及完成任务的更好方法吗?
谢谢!
【问题讨论】: