R 如何解决这个问题;找不到函数“”的继承方法;将xml转换为数据帧时出错?

R 如何解决这个问题;找不到函数“”的继承方法;将xml转换为数据帧时出错?,r,xml,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.c

所以我有这个包和函数来挖掘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位于具有可变长度成员的深度嵌套列表结构中,因此不可能自动将其强制为矩形数据结构(即数据帧)

可以通过各种方式提取所需的数据,但您需要决定从每个记录中提取哪些字段,以及如果单个字段中有多个条目,该如何处理,等等

我建议您首先使用
xml2::as_list
将xml转换为列表,然后使用
str
查看其内容,以查看需要哪些字段。然后,您可以创建一个数据框,其中包含每个记录所需的字段

例如:

库(粗体)
库(XML)
图书馆(dplyr)
xml 1 T-2294 Carnivo~--CCTGTACTCTTATTCTTCGGTGTGTGGCCGGAATGGGGGAACGCCCTTAGCTGAT~
#>2 HBL008245卡尼沃~
#>3 HBL008385 Carnivo~ACTCTTTACTTTTTTTGGCATGAGCGGAATAGGGCACTGCATTAGCATATAGCTATTTGATT~
#>4 HBL008419 Carnivo~nntttatatttgctttcgggggcatgaggccggtataggcactgctctaagcctctaatt~
#>5 HLC-10619 Carnivo~ACCCTTTACTCTTCGGTGCATGAGCCCGGAATAGGGAACTCCCTCTCTAATC~
#>6 ROM 101864 Carnivo~ACTCTCTACCTCTCTCTCTCTCGGGGCTTGGGCTGGAATAGTGGGCACCCTCTCAGCTACTAATT~
#>7 ROM 93093 Carnivo~ACTTTGTATTATTTTGGAGCATGAGGCCGGCATAGTTACCGCCCTGAGCTTTATC~
#>8 bLpa138 Carnivo~ccctgctatatctcaataccaacccccctattcgtctgatctgttttacactgcttct~
#>9 Fge20 Carnivo~ccctgcatatcaacacctctcttcgtctctctctctcttaattachtgtttt~
#>10 bCth05 Carnivo~TTCGCTGCCCTCATATAGCCTTCCATTGTAATATCCATATCATATTCATCCATCCATCATCATCCATTT~
#> # ... 还有4567行

该代码工作正常,但使用“as___________________________seqspec”函数和“format=“tsv”时,数据框中只有3列,使用函数“bold___seqspec”。在您将其转换为tibble之前,列表结果似乎包含了我想要的所有信息,但我无法将其正确取消列表,谢谢您的帮助answer@tadeufontes是的,这就是我在回答中解释的。例如,我从每个记录中选择了三个字段放在数据框中,因为您不能简单地取消整个列表的列表并将其称为数据框:每个记录有不同数量的条目,因此数据不是矩形格式。
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