用plantlist程序包统计科、属、种数目与生成植物名录

1 背景

考察报告中,植物名录是很重要的,而编写植物名录,统计植物的科、属、种等虽然并不复杂,但是非常繁琐,有时野外考察可能只用一两天,而编辑和校对植物名录可能需要数天时间。

plantlist程序包的count_taxa()函数可十分方便地统计科、属、种的数目,而make_checklist()函数可按照一定要求生成markdown格式的植物名录,该文件可用Rstudio或者pandoc等软件转换为html、docx、 pdf、 tex等多种格式。

本文简要介绍这两个函数的用法。

1.1 问题一. 现有若干植物中文名,请统计这些植物出现在多少个科?多少个属?每个科、属下各有多少个种?

解析:给定植物中文名,为了查明科、属、种的数目,可以按照以下思路解决:

  1.  去掉重复的中文名
    
  2.  去掉《中国植物志》等数据库中不能匹配的中文名
    
  3.  查询每个种在《中国植物志》接受的拉丁学名以及科、属
    
  4.  科名现在一般只按照APG系统的科名(APG     III或者APG     IV)
    
  5.  提取拉丁学名中的属名
    
  6.  分别对科、属、种的出现情况进行汇总
    

1.2 问题二. 现有若干植物中文名,请按照系统发育顺序生成植物名录,要求科按照系统发育顺序排列,属和种分别按照字母顺序排列

解析: 植物名录是对某地所出现所有植物的编目,常包括几百种甚至上千种。正式出版的植物名录,一般按照类群的系统发育顺序排列,从大类群上来看,按照:苔藓植物、蕨类植物、裸子植物、被子植物的顺序排列。其中,蕨类植物、裸子植物、被子植物都已经有基于分子系统学证据排列的科顺序号。科以下等级,如果是地区等级的名录,常按照属名的字母顺序排列。如果是类群专著,一般是按照类群内系统发育顺序,该顺序多是植物分类学家按照自己的观点排列的,由于多反映个人观点,有时候争议较大,这里不针对某一具体类群(例如菊科)的族、属、系、组、种的排列顺序深入讨论。为了便于查询,同时方便用计算机自动生成名录,这里,属和种按照字母顺序排列。

具体来讲,可按照如下思路生成名录:

  1.  用`plantlist::CTPL()`函数查询植物的科、属、种、分布、濒危等级等信息
    
  2.  标本引证信息可通过`merge`函数添加到`CTPL`的查询结果上(本文示例未提供标本引证)
    
  3.  提取名录中出现的科、属、种,并按照系统发育顺序排列(具体参见`CTPL`查询所得的科名顺序号)
    
  4.  遇到类群如苔藓植物、蕨类植物、裸子植物,需要标注在markdown文档中
    
  5.  每个类群下,按照科名循环;每个科下,按照属名循环;每个属下,按照种名循环。这样可以确保种中文名、学名以及物种对应的信息(生境、IUCN等级、分布等)以正确的顺序出现。
    
  6.  在植物名录不需要显示太多内容时,要减少相应信息的显示,为此可设定不同主题(theme),控制显示内容。
    

2 代码

2.1 安装plantlist程序包

本文介绍的两个函数是plantlist程序包在0.6.0以后增加的,因此使用旧版本plantlist的用户也需要更新。

注意plantlist的最新版本只保存在github (https://github.com/helixcn/plantlist), 请用以下命令安装。

1
2
## 安装plantlist## 版本 > 0.6.1## 
devtools::install_github("helixcn/plantlist")

2.2 加载程序包

1
2
3
setwd("/Users/jinlong/compile_checklist/") 
library(plantlist)library(rmarkdown)
rm(list = ls())

2.3 用count_taxa()统计科属数目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# 植物名species_names <- c("西康玉兰", 
"肥肉草",
"野牡丹",
"厚朴",
"金缕梅",
"黑水银莲花",
"连香树",
"牛膝菊",
"三国演义",
"华南紫萁22",
"槲蕨",
"江南卷柏",
"马尾松",
"白发藓",
"提灯藓",
"红豆杉",
"野牡丹",
"毛稔","阴香",
"赤楠","红鳞蒲桃",
"山蒲桃","卫矛叶蒲桃",
"黑壳楠","红果山胡椒",
"黄樟","乌药")
count_taxa(CTPL(species_names, print_as_list = FALSE))
## Duplicated taxa names have been removed:
## 野牡丹
## Warning in CTPL(species_names, print_as_list = FALSE): Taxa: 三国演义, 华南紫萁22, 毛稔
## could not be recognized.
## $NO_OF_FAMILIES## [1] 14
##
## $NO_OF_GENERA
## [1] 16
##
## $NO_OF_SPECIES
## [1] 23
##
## $NO_OF_FAMILIES_BY_GROUP
## group no_of_families
## 1 2
## 2 2 Ferns and lycophytes 2
## 3 3 Gymnosperms 2
## 4 4 Angiosperms 8
##
## $NO_OF_GENERA_BY_GROUP
## group no_of_genera
## 1 2
## 2 2 Ferns and lycophytes 2
## 3 3 Gymnosperms 2
## 4 4 Angiosperms 10
##
## $NO_OF_SPECIES_BY_GROUP
## group no_of_species
## 1 2
## 2 2 Ferns and lycophytes 2
## 3 3 Gymnosperms 2
## 4 4 Angiosperms 17
## ## $NO_OF_GENERA_BY_FAMILY
## family no_of_genera
## 1 Asteraceae 1
## 2 Cercidiphyllaceae 1
## 3 Dicranaceae 1
## 4 Hamamelidaceae 1
## 5 Lauraceae 2
## 6 Magnoliaceae 1
## 7 Melastomataceae 2
## 8 Mniaceae 1
## 9 Myrtaceae 1
## 10 Pinaceae 1
## 11 Polypodiaceae 1
## 12 Ranunculaceae 1
## 13 Selaginellaceae 1
## 14 Taxaceae 1
##
## $NO_OF_SPECIES_BY_FAMILY
## family no_of_species
## 1 Asteraceae 1
## 2 Cercidiphyllaceae 1
## 3 Dicranaceae 1
## 4 Hamamelidaceae 1
## 5 Lauraceae 5
## 6 Magnoliaceae 2
## 7 Melastomataceae 2
## 8 Mniaceae 1
## 9 Myrtaceae 4
## 10 Pinaceae 1
## 11 Polypodiaceae 1
## 12 Ranunculaceae 1
## 13 Selaginellaceae 1
## 14 Taxaceae 1
##
## $NO_OF_SPECIES_BY_GENUS
## genus no_of_species
## 1 Anemone 1
## 2 Cercidiphyllum 1
## 3 Cinnamomum 2
## 4 Drynaria 1
## 5 Fordiophyton 1
## 6 Galinsoga 1
## 7 Hamamelis 1
## 8 Leucobryum 1
## 9 Lindera 3
## 10 Magnolia 2
## 11 Melastoma 1
## 12 Mnium 1
## 13 Pinus 1
## 14 Selaginella 1
## 15 Syzygium 4
## 16 Taxus 1

2.4 用make_checklist生成植物名录

生成的文件为markdown格式,请参考

  •  https://rmarkdown.rstudio.com/index.html
    
  •  https://zh.wikipedia.org/wiki/Markdown
    
1
checklist_dat2 <- CTPL(species_names, print_as_list = FALSE)

2.4.1 简洁版,只列出引证的标本

1
2
3
make_checklist(checklist_dat2, 
outfile = "checklist_simple.md",
theme = "simple")

2.4.2 复杂版,尽量列出数据库已经有的信息

1
2
3
make_checklist(checklist_dat2, 
outfile = "checklist_complex.md",
theme = "complex")

2.4.3 极简版,只列出中文名和拉丁名

1
2
3
make_checklist(checklist_dat2, 
outfile = "checklist_minimal.md",
theme = "minimal")

2.5 markdown源代码

图1. 植物名录的Markdown源代码

2.6 用rmarkdown程序包编译md文件,生成名录

markdown文档既可以用rmarkdown程序包编译为html格式,也可以用pandoc转换为docx、pdf等。

2.6.1 只显示标本引证的Simple主题

1
rmarkdown::render("checklist_simple.md", encoding = "UTF-8")

图2. Simple主题

2.6.2 尽量信息物种信息的Complex主题

1
rmarkdown::render("checklist_complex.md", encoding = "UTF-8")

图3. Complex主题

2.6.3 只显示中文名和学名的Minimal主题

1
rmarkdown::render("checklist_minimal.md", encoding = "UTF-8")

图4. Minimal主题

参考资料

  •  THE     ANGIOSPERM PHYLOGENY GROUP. 2009. “An Update of the Angiosperm     Phylogeny Group Classification for the Orders and Families of     Flowering Plants: APG III.” Botanical Journal of the Linnean     Society 161 (2): 105–21.
    
  •  Christenhusz,     M., Zhang, X. C., and Schneider, H. (2011). A linear sequence of     extant families and genera of lycophytes and ferns. Phytotaxa.     19:7-54
    
  •  Christenhusz,     M., Reveal, J., Farjon, A., Gardner, M. F., Mill, R. R., and Chase,     M. W. (2011). A new classification and linear sequence of extant     gymnosperms. Phytotaxa. 19:55-70
    
  •  Haston,     E., Richardson, J. E., Stevens, P. F., Chase, M. W. and Harris, D.     J. (2009). The Linear Angiosperm Phylogeny Group (LAPG) III: a     linear sequence of the families in APG III. Botanical Journal of the     Linnean Society, 161(2), 128-131.
    
  •  Liu     Bing, Ye Jianfei, Liu Su, Wang Yuan, Yang Yong, Lai Yangjun, Zeng     Gang and Lin Qinwen(2015). Families and genera of Chinese     angiosperms: a synoptic classification based on APG III.     Biodiversity Science. 23(2), 225-231.