R语言【metacoder】——parse_tax_data():将一个或多个数据集转换为taxmap对象

Package metacoder version 0.3.6


Description

读取表、列表和向量中的分类信息和相关数据,并将其存储在taxmap()对象中。


Usage

parse_tax_data(
  tax_data,
  datasets = list(),
  class_cols = 1,
  class_sep = ";",
  sep_is_regex = FALSE,
  class_key = "taxon_name",
  class_regex = "(.*)",
  class_reversed = FALSE,
  include_match = TRUE,
  mappings = c(),
  include_tax_data = TRUE,
  named_by_rank = FALSE
)

Arguments

参数【tax_data】:包含代表[分类学分类]的分类群名称的表、列表或向量。被接受的分类表示法包括:*分类单元名称的列表/向量或表格:类似于"Animalia;Chordata;Mammalia;Primates;Hominidae;Homo"。可以使用'class_sep'选项更改使用的分隔符(在本例中为";")。对于表,分类可以分布在多个列上,分隔符将应用于每个列,尽管每个列可以只是单个分类单元名称,没有分隔符。使用'class_cols'选项指定哪些列具有分类单元名称。一个列表,其中每个条目都是一个分类。例如,“list(c(“Animalia”,“Chordata”,“Mammalia”,“Primates”,“Hominidae”,“Homo”),…)”。数据帧的列表,其中每个帧代表一个分类,每行有一个分类单元。包含分类单元名称的列使用'class_cols'选项指定。在这种情况下,只指定一个列是有意义的。

参数【datasets】:应该包含在结果'taxmap'对象中的其他列表/向量/表。'mappings'选项用于指定这些数据集如何与'tax_data'相关联,以及根据推断,应用于每个项的分类组。

参数【class_cols】:('character'或'integer')如果第一个输入是表,则包含分类的列的名称或索引。如果指定了多个列,它们将按照给定的顺序组合。负列索引是指“除这些列之外的每一列”。

参数【class_sep】:('字符')一个或多个分隔符,在分类中划定分类单元的名称。例如,如果一列是“Homo sapiens”,另一列是“Animalia;Chordata;Mammalia;Primates;Hominidae”,那么“class_sep = c(“”,“;”)”。所有分隔符应用于每个列,因此顺序无关紧要。

参数【sep_is_regex】:('TRUE'/'FALSE')是否应该将'class_sep'用作[正则表达式]。

参数【class_key】:('character'长度为1)使用'class_regex'定义的捕获组的标识。'class_key'的长度必须等于'class_regex'中指定的捕获组的数量。添加到术语中的任何名称都将用作输出中的列名。必须至少指定一个“taxon_name”。只有“info”可以多次使用。每个术语必须是以下描述的其中一个:’taxon_name‘:分类单元的名称。不一定是唯一的,但可以通过特定的“数据库”来解释。’taxon_rank‘:分类单元的等级。这将用于向输出对象中添加排名信息,该输出对象可以通过'out$taxon_ranks()'访问。’info‘:输出中包含的任意分类单元信息。可以多次使用。

参数【class_regex】:(长度为1的'character')一个正则表达式,其捕获组指示'key'参数中'class'项中每个分类单元的数据位置。信息的标识必须使用'class_key'参数指定。'class_sep'选项可用于在匹配之前将分类拆分为每个分类单元的数据。如果'class_sep'为'NULL',则'class_regex'的每次匹配都在分类中定义一个分类单元。

参数【class_reversed】:如果为TRUE,则分类从特定到一般。例如:’Abditomys latidens : Muridae : Rodentia : Mammalia : Chordata‘。

参数【include_match】:('logical'长度为1)如果'TRUE',则在输出对象中包含与'class_regex'匹配的输入部分。

参数【mappings】:(命名为'character')这定义了'tax_data'中的分类信息如何应用于' datassets '中的数据集。该选项应该具有与“数据集”相同的输入数量,并具有对应于每个数据集的值。字符向量的名称指定'tax_data'中的哪些信息与每个'dataset'中的信息共享,这些信息由字符向量的相应值指定。如果没有共享变量,可以添加'NA'作为占位符,但是可以不添加该数据,因为它不会从taxmap对象中受益。名称/值可以是下列之一:对于表,可以使用列的名称。’index‘:这意味着使用行/项的索引。’name‘:这意味着使用行/项名称。’value‘:这意味着使用向量或列表中的值。使用[unlist()]将列表转换为向量。

参数【include_tax_data】:('TRUE'/'FALSE')是否包含'tax_data'作为数据集,就像' datassets '中的数据集一样。

参数【named_by_rank】:('TRUE'/'FALSE')如果'TRUE'并且输入是一个包含以排名命名的列的表或每个向量以排名命名的向量列表,则在输出对象中包含该排名信息,因此可以通过'out$taxon_ranks()'访问它。如果为TRUE,则具有不同等级但在分类学中名称和位置相同的分类群将被认为是不同的分类群。不能与'sep'、'class_regex'或'class_key'选项一起使用。


Examples

从向量中读取分类信息:

my_taxa <- c("Mammalia;Carnivora;Felidae",
              "Mammalia;Carnivora;Felidae",
              "Mammalia;Carnivora;Ursidae")

my_taxmap <- parse_tax_data(my_taxa, class_sep = ";")

my_taxmap
<Taxmap>
  4 taxa: b. Mammalia ... e. Ursidae
  4 edges: NA->b ... c->e
  1 data sets:
    tax_data: a named vector of 'character' with 3 items
       d. Mammalia;Carnivora;Felidae ... e. Mammalia;Carnivora;Ursidae
  0 functions:
my_taxmap$data
$tax_data
                           d 
"Mammalia;Carnivora;Felidae" 
                           d 
"Mammalia;Carnivora;Felidae" 
                           e 
"Mammalia;Carnivora;Ursidae" 
my_taxmap$taxa
$b
<Taxon>
  name: Mammalia
  rank: none
  id: none
  authority: none

$c
<Taxon>
  name: Carnivora
  rank: none
  id: none
  authority: none

$d
<Taxon>
  name: Felidae
  rank: none
  id: none
  authority: none

$e
<Taxon>
  name: Ursidae
  rank: none
  id: none
  authority: none

从列表中读取分类:

my_taxa <- list("Mammalia;Carnivora;Felidae",
                "Mammalia;Carnivora;Felidae",
                "Mammalia;Carnivora;Ursidae")

my_taxmap <- parse_tax_data(my_taxa, class_sep = ";")

my_taxmap
<Taxmap>
  4 taxa: b. Mammalia ... e. Ursidae
  4 edges: NA->b, b->c, c->d, c->e
  1 data sets:
    tax_data: a list of 3 items named by taxa:
       d, d, e
  0 functions:

从数据框中读取分类:

species_data <- data.frame(tax = c("Mammalia;Carnivora;Felidae",
                                    "Mammalia;Carnivora;Felidae",
                                    "Mammalia;Carnivora;Ursidae"),
                           species_id = c("A", "B", "C"))

my_taxmap <-  parse_tax_data(species_data, class_sep = ";", class_cols = "tax")

my_taxmap
<Taxmap>
  4 taxa: b. Mammalia, c. Carnivora, d. Felidae, e. Ursidae
  4 edges: NA->b, b->c, c->d, c->e
  1 data sets:
    tax_data:
      # A tibble: 3 × 3
        taxon_id tax                        species_id
        <chr>    <chr>                      <chr>     
      1 d        Mammalia;Carnivora;Felidae A         
      2 d        Mammalia;Carnivora;Felidae B         
      3 e        Mammalia;Carnivora;Ursidae C         
  0 functions:

分类信息在数据框的多个列中:

 species_data <- data.frame(lineage = c("Mammalia;Carnivora;Felidae",
                                        "Mammalia;Carnivora;Felidae",
                                        "Mammalia;Carnivora;Ursidae"),
                            species = c("Panthera leo",
                                        "Panthera tigris",
                                        "Ursus americanus"),
                            species_id = c("A", "B", "C"))

my_taxmap <- parse_tax_data(species_data, class_sep = c(" ", ";"),
                class_cols = c("lineage", "species"))

my_taxmap
<Taxmap>
  9 taxa: b. Mammalia, c. Carnivora ... i. tigris, j. americanus
  9 edges: NA->b, b->c, c->d, c->e, d->f, e->g, f->h, f->i, g->j
  1 data sets:
    tax_data:
      # A tibble: 3 × 4
        taxon_id lineage                    species       species_id
        <chr>    <chr>                      <chr>         <chr>     
      1 h        Mammalia;Carnivora;Felidae Panthera leo  A         
      2 i        Mammalia;Carnivora;Felidae Panthera tig… B         
      3 j        Mammalia;Carnivora;Ursidae Ursus americ… C         
  0 functions:
my_taxmap$taxon_names()
           b            c            d            e            f            g 
  "Mammalia"  "Carnivora"    "Felidae"    "Ursidae"   "Panthera"      "Ursus" 
           h            i            j 
       "leo"     "tigris" "americanus"

各等级分类信息保存在数据框的独立列中:

 species_data <- data.frame(class = c("Mammalia", "Mammalia", "Mammalia"),
                            order = c("Carnivora", "Carnivora", "Carnivora"),
                            family = c("Felidae", "Felidae", "Ursidae"),
                            genus = c("Panthera", "Panthera", "Ursus"),
                            species = c("leo", "tigris", "americanus"),
                            species_id = c("A", "B", "C"))

my_taxmap <- parse_tax_data(species_data, class_cols = 1:5)

my_taxmap
<Taxmap>
  9 taxa: b. Mammalia, c. Carnivora, d. Felidae ... i. tigris, j. americanus
  9 edges: NA->b, b->c, c->d, c->e, d->f, e->g, f->h, f->i, g->j
  1 data sets:
    tax_data:
      # A tibble: 3 × 7
        taxon_id class    order     family  genus    species    species_id
        <chr>    <chr>    <chr>     <chr>   <chr>    <chr>      <chr>     
      1 h        Mammalia Carnivora Felidae Panthera leo        A         
      2 i        Mammalia Carnivora Felidae Panthera tigris     B         
      3 j        Mammalia Carnivora Ursidae Ursus    americanus C         
  0 functions:
my_taxmap$taxon_ranks()
 b  c  d  e  f  g  h  i  j 
NA NA NA NA NA NA NA NA NA 
my_taxmap <- parse_tax_data(species_data, class_cols = 1:5, named_by_rank = TRUE)

my_taxmap$taxon_ranks()
        b         c         d         e         f 
  "class"   "order"  "family"  "family"   "genus" 
        g         h         i         j 
  "genus" "species" "species" "species"

除了基本的等级和分类信息外,还有额外信息:

my_taxa <- c("Mammalia_class_1;Carnivora_order_2;Felidae_genus_3",
              "Mammalia_class_1;Carnivora_order_2;Felidae_genus_3",
              "Mammalia_class_1;Carnivora_order_2;Ursidae_genus_3")


my_taxmap <- parse_tax_data(my_taxa, class_sep = ";",
                class_regex = "(.+)_(.+)_([0-9]+)",
                class_key = c(my_name = "taxon_name",
                              a_rank = "taxon_rank",
                              some_num = "info"))

my_taxmap
<Taxmap>
  4 taxa: b. Mammalia, c. Carnivora, d. Felidae, e. Ursidae
  4 edges: NA->b, b->c, c->d, c->e
  2 data sets:
    tax_data: a named vector of 'character' with 3 items
       d. Mammalia_class_1[truncated] ... e. Mammalia_class_1[truncated]
    class_data:
      # A tibble: 9 × 6
        taxon_id input_index my_name   a_rank some_num regex_match      
        <chr>          <int> <chr>     <chr>  <chr>    <chr>            
      1 b                  1 Mammalia  class  1        Mammalia_class_1 
      2 c                  1 Carnivora order  2        Carnivora_order_2
      3 d                  1 Felidae   genus  3        Felidae_genus_3  
      # ℹ 6 more rows
      # ℹ Use `print(n = ...)` to see more rows
  0 functions:

处理多个数据集:

species_data <- data.frame(tax = c("Mammalia;Carnivora;Felidae",
                                     "Mammalia;Carnivora;Felidae",
                                     "Mammalia;Carnivora;Ursidae"),
                             species = c("Panthera leo",
                                         "Panthera tigris",
                                         "Ursus americanus"),
                             species_id = c("A", "B", "C"))

abundance <- data.frame(id = c("A", "B", "C", "A", "B", "C"),
                          sample_id = c(1, 1, 1, 2, 2, 2),
                          counts = c(23, 4, 3, 34, 5, 13))

common_names <- c(A = "Lion", B = "Tiger", C = "Bear", "Oh my!")

foods <- list(c("ungulates", "boar"),
                c("ungulates", "boar"),
                c("salmon", "fruit", "nuts"))

x = parse_tax_data(species_data,
                     datasets = list(counts = abundance,
                                     my_names = common_names,
                                     foods = foods),
                     mappings = c("species_id" = "id",
                                  "species_id" = "{{name}}",
                                  "{{index}}" = "{{index}}"),
                     class_cols = c("tax", "species"),
                     class_sep = c(" ", ";"))

x$data
$tax_data
# A tibble: 3 × 4
  taxon_id tax                        species          species_id
  <chr>    <chr>                      <chr>            <chr>     
1 h        Mammalia;Carnivora;Felidae Panthera leo     A         
2 i        Mammalia;Carnivora;Felidae Panthera tigris  B         
3 j        Mammalia;Carnivora;Ursidae Ursus americanus C         

$counts
# A tibble: 6 × 4
  taxon_id id    sample_id counts
  <chr>    <chr>     <dbl>  <dbl>
1 h        A             1     23
2 i        B             1      4
3 j        C             1      3
4 h        A             2     34
5 i        B             2      5
6 j        C             2     13

$my_names
       h        i        j     <NA> 
  "Lion"  "Tiger"   "Bear" "Oh my!" 

$foods
$foods$h
[1] "ungulates" "boar"     

$foods$i
[1] "ungulates" "boar"     

$foods$j
[1] "salmon" "fruit"  "nuts"
map_data(x, my_names, foods)
$Lion
[1] "ungulates" "boar"     

$Tiger
[1] "ungulates" "boar"     

$Bear
[1] "salmon" "fruit"  "nuts"  

$`Oh my!`
NULL
map_data(x, counts, my_names)
     23       4       3      34       5      13 
 "Lion" "Tiger"  "Bear"  "Lion" "Tiger"  "Bear" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALittleHigh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值