r - xml转数据框时出现“无法找到函数的继承方法”错误如何解决?
问题描述
所以我有这个包和函数来以 xml 的形式挖掘数据帧,我尝试将 xml 转换为单个数据帧,但我做不到。我使用了这段代码:
library(bold)
library(XML)
library(dplyr)
xml = bold_seqspec(taxon=c("carnivora"), format = "xml", marker="COI-5P")
df= xmlToDataFrame(xml , stringsAsFactors = FALSE,) %>%
mutate_all(~type.convert(., as.is = T))
但是,我在“xmlToDataFrame”函数中收到以下错误:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘xmlToDataFrame’ for signature ‘"xml_document", "missing", "missing", "missing", "missing"’
解决方案
问题是xml在一个深度嵌套的列表结构中,具有可变长度的成员,因此无法自动将其强制转换为矩形数据结构(即数据框)。
可以通过各种方式提取您想要的数据,但是您需要确定您想要从每条记录中获取哪些字段以及如果单个字段中有多个条目该怎么办等。
我建议您首先使用将 xml 转换为列表并使用它来xml2::as_list
探索其内容str
以查看您想要的字段。然后,您可以为每条记录创建一个包含所需字段的数据框。
例如:
library(bold)
library(XML)
library(dplyr)
xml <- bold_seqspec(taxon=c("carnivora"), format = "xml", marker="COI-5P")
df <- xml2::as_list(xml)
df <- df$bold_records
result <- do.call(rbind, lapply(df, function(x)
{
data.frame(specimen = x$specimen_identifiers$sampleid[[1]],
order = x$taxonomy$order$taxon$name[[1]],
nucleotides = x$sequences$sequence$nucleotides[[1]],
stringsAsFactors = FALSE)
}))
现在result
看起来像这样:
tibble::as_tibble(result)
#> # A tibble: 4,577 x 3
#> specimen order nucleotides
#> <chr> <chr> <chr>
#> 1 T-2294 Carnivo~ ---CCTGTACCTCTTATTCGGTGCGTGAGCCGGAATGGCGGGAACCGCCCTTAGCCTACTGAT~
#> 2 HBL008245 Carnivo~ NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN~
#> 3 HBL008385 Carnivo~ ACTCTTTACCTTTTATTTGGCGCATGAGCCGGAATAGTAGGCACTGCATTAAGCCTATTGATT~
#> 4 HBL008419 Carnivo~ NNTTTATATTTGCTATTCGGGGCATGAGCCGGTATAGTAGGCACTGCCCTAAGCCTCCTAATT~
#> 5 HLC-10619 Carnivo~ ACCCTTTACCTCTTATTCGGTGCATGAGCCGGAATAGTAGGAACTGCCCTCAGTCTTCTAATC~
#> 6 ROM 101864 Carnivo~ ACTCTCTACCTTCTATTCGGGGCTTGGGCTGGAATAGTGGGCACCGCTCTCAGCCTACTAATT~
#> 7 ROM 93093 Carnivo~ ACTTTGTATTTATTATTTGGAGCATGAGCCGGCATAGTAGGTACCGCCCTGAGCCTTCTTATC~
#> 8 bLpa138 Carnivo~ CCCTGCTATATCTCAATACCAAACACCCCTATTCGTCTGATCTGTTTTAATCACTGCTGTTCT~
#> 9 Fge20 Carnivo~ CCCTGCCATATCTCAATATCAAACACCTCTCTTCGTCTGATCTGTCTTAATTACTGCTGTTTT~
#> 10 bCth05 Carnivo~ TTCGCTGCCCCCTCAATAATAGGCCTTCCTATTGTAATCCTAATCATTATATTCCCATCCATT~
#> # ... with 4,567 more rows
推荐阅读
- c - 有人可以帮忙吗,我无法修复应该向后打印的程序
- cloud - Azure 认知搜索替代方案
- java - equals method calling a setter, is there anti-pattern documentation?
- c# - 如何访问特定的 collectionview 子项?在这种情况下,标签“DataCadastroLabel”
- apache-spark - 如何将 df 的两列获取到一个数据帧?
- nginx - Serving index.html from nginx but keep file links intact through rewriting(?)
- typescript - 将代码重构为单独的文件时,“TS2345:类型参数不可分配给类型参数”
- python - Animation shows only a static picture - jupyter notebook
- spring - Spring MVC and the @Data annotation
- typescript - 反应导航名称问题