使用hexo生成和部署网站

1. 下载和安装nodejs

https://nodejs.org/en/

2. 下载和安装hexo

https://hexo.io/

3. 建立一个文件夹,用来保存hexo项目文件

例如 C:\someone\hexo blog someone

4. 初始化hexo项目

在 git bash里面输入

1
2
$ hexo init
$ npm install

项目即在hexo blog someone文件夹下建立了。

5. 编辑网站基本信息

在 C:\someone\hexo blog someone文件夹下,编辑 _config.yml 文件

其中:

1
2
3
4
5
6
7
8
9
10
11
12
# Site
title: someone's blog
author: someone
# URL
url: https://someone.github.io

# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: git
repository: https://github.com/someone/someone.github.io
branch: master

6. 拷贝markdown文档到_post文件夹

将准备好的markdown文件,拷贝到 \hexo blog someone\source\_posts 中。
最好按照如下方式命名:

2010-01-04-ubuntur8s.md

另外, 在每个markdown文件的头部增加YAML说明。

1
2
3
4
5
6
---
layout: post
title: "群落系统发育研究不能脱离理论框架"
date: 2020-12-30 09:14:00+08:00
tags: [随笔]
---

7. 生成网站

在git bash中输入:

1
$ hexo generate

8. 预览网站

在git bash中输入:

1
$ hexo serve

然后, 在浏览器地址栏输入localhost:4000/即可预览网站

9. 增加关于本人的about页面:

分成两步

(1) 在网站下,保证 someone.github.io/about 网址有相应网页

1
$ hexo new page about

此命令运行之后,hexo blog someone\source 下即生成about文件夹。编辑其中的 index.md 内容即可。

(2)让网站首页显示about的链接

在需要更改hexo blog someone\node_modules\hexo-theme-landscape下的_config.yml文件,
menu: 下增加 About: /about 一行。

1
2
3
4
5
6
7
# Header
menu:
Home: /
Archives: /archives
About: /about
rss: /atom.xml
banner: "images/banner.jpg"

如要显示不同的banner, 则将banner.jpg的照片做相应置换即可。

10. 部署到github

安装hexo-deployer-git,在git bash中输入命令:

1
$ npm install hexo-deployer-git --save

在git bash中输入:

1
$ hexo deploy

用pkgdown为R程序包建立网站

内容提要

  • 为R程序包建立project
  • 管理Rstudio中的git选项卡
  • 用pkgdown编译网站
  • 将docs文件夹上传到github
  • 设定github展示网页
  • 修改与重新发布

1 目的

本文以HK80程序包为例 (http://helixcn.github.io/HK80/),介绍怎样将R 包的帮助文件(Rd文件)和vignettes中的Rmd文件等编译为网站并发布到github pages,以方便浏览。

2 所需软件

  1. R (https://www.r-project.org/)
  2. Rstudio (https://rstudio.com/products/rstudio/download/)
  3. git (https://git-scm.com/)
  4. github仓库,以(https://github.com/helixcn/HK80)为例为例){.uri}
  5. 保存在本地的R包源代码,本文以HK80为例,可在 (https://github.com/helixcn/hk80) 下载
  6. pkgdown、knitr、rmarkdown、sf、jsonlite、sp、biogeo等程序包

操作的主要在Rstudio中完成。

3 为R程序包建立project

在Rstudio中管理R包,一般要建立一个Rproject,以便于管理,因此先介绍如何创建R包的Rproject。

方法为:File>New Project>Existing Directory,找到程序包的源代码所在文件夹,打开即可。

建立R项目将对程序包内的R代码进行格式化(如调整换行和缩进),同时会创建.Rproj、.gitignore等文件。

img

图1. 建立新项目

img

图2. 基于已有文件夹建立新项目

.gitignore是一个纯文本文件,保存的是不想同步到github的文件列表。不同项目的.gitignore一般来说也是不同的。Rstudio创建的.gitignore文件对于一般的R包项目已经足够。

4 管理Rstudio中的git选项卡

img

图3. git选项卡与等待提交(commit)的文件

创建好Rproject之后,可以看到在Rstudio的addin中,也增加了若干选项卡:

img

图4. Rstudio的Addin选项

img

图5. 安装、检查和编译R程序包选项

  • 在Build选项卡中,可找到安装程序包、编译程序包源代码的按钮。
  • 在git选项卡中,可找到任何内容有更改的文件名,并有diff、commit、pull、push等按钮。代码做了修改以后有哪些变化,点击diff即可查看。若有文件做了改动,需要提交修改,则可以点击commit,同时提供相应的备注(message)。
  • commit提交以后,本地的修改已经放入git缓存中,但是仍然未与github上的仓库同步,点击push即可提交到github网站。

不过,有时github上的网站可能通过网页版本编辑过,与本地版本不一致,此时,应该先点击pull,将本地文件夹中的源文件与github同步,再从最新版本开始修改,以免发生版本冲突。

5 用pkgdown生成网站

  1. 在R中输入 usethis::use_pkgdown(),程序包的根目录将自动创建_pkgdown.yml,而且其他如.gitignore等会也被自动修改。

img

图6. 项目中整合pkgdown

Rstudio会自动打开pkgdown.yml等待用户编辑,不过一般情况下并不需要编辑。

要将文档编译为pkgdown网站,用如下命令:

1
pkgdown::build_site()

该命令将编译README.md文件,man文件夹下的rd文件以及vigenettes下的Rmd文件,并将read.md文件作为程序包网站的首页,编译好的各文件自动包含了knitr运行的结果(如各函数帮助文件的图表等)。编译完成,则程序包根目录下会生成docs文件夹,里面保存了用pkgdown生成的网站。

img

图7. pkg程序包正在编译文档,生成网站

6 将docs文件夹上传到github

虽然网站已经生成,但git不会自动将docs文件夹上传到github,这是因为该文件夹在.gitignore中默认是被忽略的。要将网站上传到github,需要先更改.gitignore。

修改的方法是:打开.gitignore文件,在doc前面加上一个英文井号,将这一行注释掉。

img

图8. 编辑.gitignore文件

回到Rstudio的git窗口,doc文件夹现在变成可见了。

img

图9. 待commit到git缓存中的文件

勾选docs文件夹,点击commit,写好相应的备注信息message,docs文件夹下所有的内容就放入了git的本地缓存中。

img

图10. 提交时为了更好记录更改历史,要提供message

按右上角的push按钮(向上的绿色箭头),即可将修改上传到github网站。

7 让docs下的网站可以从github访问

怎样才能让网址 (https://helixcn.github.io/HK80) 显示 docs文件夹中的内容呢?

方法如下:

打开 https://github.com/helixcn/hk80 网页,修改settings中的GitHub Pages选项。

路径为:Settings>GitHub Pages>Source>Master>/docs 点击 save(保存)。

保存后,网站 https://helixcn.github.io/HK80 即可浏览。

img

图11. HK80的源代码网页,注意右上角的Settings

img

图12. GitHub pages的设定

8 修改与重新发布

若R的文档文件进行过任何修改,则需要重新运行pkgdown::build_site()以更新docs文件夹中的内容。每一次对程序包的代码修改以后,都需要在git面板提交(commit),然后用push同步到github的仓库中。当然,输入git命令行的用户可以直接通过命令行提交。

进一步阅读

为什么《xxxx在XX研究中取得进展》这类文章很少有人转发?

当一个人开始在乎什么,就进入了快乐与忧愁的分水岭。文章、基金、帽子等等,人生要奋斗的东西,其实是没有尽头的。

忽然想起一年多以来某研究所公众号文章的写法问题。该公众号主要发文介绍研究所内各研究团队的研究进展。因为重量级研究成果现在都是在英文学术期刊上发表的,与公众有一定距离,单位自己在微信中用中文介绍一下进展当然对信息传播特别重要,甚至对很多研究人员都是如此,成为他们了解研究动态的重要方式。

时至今日,任何一个学科,每天都有成百上千的新论文发表。对研究人员来说,如果不做到精与专,不会很好地选择文献,很快就会淹没在文献的海洋中。有时候,了解同行最近的进展,微信公众号确实是很有帮助的,毕竟中文阅读起来对大多数人更容易。可是,类似以“进展”为标题的文章阅读量却非常少,更别提转发了。

为什么这种网文没什么人转发,甚至很多国内同行都不愿意看呢?这是因为,除了该单位的科研管理人员,还有发表成果的研究团队成员们有一定兴趣之外,其他能看懂的小同行们更愿意看到的其实不是别的团队发了什么论文,也不关心成果发在什么期刊上,他们愿意看的,是该团队对学科的贡献,贡献与论文发在什么刊物上并不能划等号,更与宣传力度无关。

近些年,论文,与帽子、基金等一样,似乎跟像奥运奖牌一样被异化了,这在某种程度上偏离了做学问的初衷。这种情况下,如果公众号仍然不停宣称自己单位在xxx研究领域取得了进展,文章发在什么顶尖期刊上,而不说贡献本身,或多或少会让读者,特别是同行们有一种不快,有些人甚至会从内心深处生出些许嫉妒或者反感。研究取得了进展,确实可喜可贺,但是只有新的认知,才算是实质贡献,否则,如果文章为研究领域带来的新认知很有限,其实是不值得大肆宣传和炫耀的。论文是否重要的关键,在于贡献的大小,贡献大,必然有人引用和关注,而这也应是宣传的重点。如果搞不清楚这个重点,夸大了宣传,难免会让人感觉名不副实,甚至会被鄙视。我想,很多研究人员,看待国内同行的“研究进展”确实有这样一种心理。

这种心态健康不健康?对还是不对?也许吧,这一切都没那么重要:“一切有为法,如梦幻泡影,如露亦如电,当做如是观”,《金刚经》里的这句话,放在此处似乎有些合适。

每个人都认为自己的研究是最重要的。不少研究人员甚至自命不凡,恃才傲物,其实大可不必,因为现如今,研究仅仅是一种工作,而产出,也只是理所应当。有产出的不必骄傲,而暂时没有产出的也不必自卑,而是更应该加一把劲,对同行取得的进展也不要有任何妒忌或者鄙视的心理。也许,这也正应验了一副对联:“精神到处文章在,学问深时意气平”。一切都要顺其自然,尽人事,听天命。

一方面,如果有读者看到这样的消息真的很不开心,甚至妒忌,那么可能还需要继续提高自身修养。另一方面,那些科研公众号的作者们,在宣传自己的研究时,也要在抓住读者的心理上下一些功夫了,必要时做一些变通。毕竟,对于文章来说,读者愿意看,作者才能传达出想表达的信息,才是成功的第一步。而如果只从作者的角度出发,不从读者的感受出发,这样的公众号文章即使写出来了,也没有人看,就偏离了写作的初衷。

3月18日 记

如何恢复森林?– 从嘉道理农场的森林恢复样地说起

内容提要

  • 1 华南地区的原始森林

  • 2 森林破坏的一般模式

  • 3 香港森林的分布与特点

  • 4 森林破坏之后自然恢复一段时间后的特征

  • 5 森林能自己恢复吗?

  • 6 人们希望恢复生态系统功能

  • 7 人工恢复不如自然恢复吗?

  • 8 我们正在做什么工作?

    • 8.1 在草地上恢复森林
    • 8.2 恢复浙江润楠、短序润楠和刨花润楠组成的次生林
    • 8.3 恢复生态学实验的矛盾
  • 9 结论与展望

  • 致谢

大家好, 我叫张金龙,在香港嘉道理农场暨植物园植物保育部工作,主要负责植物标本馆和森林恢复样地的数据管理和分析。我是天津宝坻人,2006-2011年在中科院植物所读书,2013年开始在这里从事恢复生态学有关的工作。

一提到恢复生态学,很多人会想起种树。没错,我们的任务就是种树。从2013年到现在,我们已种下4万多棵树苗,大约300个树种,还有300多种灌木、草本等。另外,我们的苗圃为其他机构提供了几万棵本土树木的幼苗,种在香港的大屿山、大榄涌水塘附近。今天很荣幸有机会跟大家介绍一下这几年工作的收获以及相应的思考。

1 华南地区的原始森林

我们关注的是南亚热带和北热带地区的森林恢复,所以关注南方的森林比较多,特别是海南、广西、广东等地的森林。

jianfengling3_resized.JPG

图1. 海南尖峰岭的北热带季雨林 (摄影 张金龙)

IMG_0906heishiding_resized.JPG

图2. 广东黑石顶的亚热带常绿阔叶林 (摄影 张金龙)

这张照片是海南岛尖峰岭的原始森林。尖峰岭位于海南岛西南端,主体是北热带季雨林。这里所说的原始森林,已经不是人迹罕至了,实际上现在也很少有什么人迹罕至的地方了。之所以说这是原始森林,是因为这片林子过去没有经过大规模砍伐。那么在这样的森林,我们能看到什么?

  1. 森林分成几层,有乔木层、亚乔木层、灌木层、草本层等。
  2. 有很高大的树木,树冠层有40-50m高,胸径达1-2m甚至更大。
  3. 每一种树木,虽然有些个体数很多,有些很少,但是大都有大树,也有小树,也有幼苗。也就是说,这些种是在不断更新的。
  4. 森林当中存在着众多的藤本以及附生植物。

植物资源调查,如采集标本、做样方等,一般都是尽量选取这样人为干扰少的地方。因为这样的地段一般来说物种多样性非常高。去这样的地方调查,各种受保护的种、稀有物种也相对容易见到,甚至能发现新种。

华南地区的原始森林原本分布着很多种动物,如长臂猿、亚洲象、犀牛、野牛等,还有各种鸟类,爬行动物、两栖动物、昆虫等等,这些基本上都在保护区考察集里面列出来了。有一个问题,就是有些种,可能几十年前、几百年前比较多,最近变得十分稀少,甚至再也没有发现过了,这样的种一般也收录在考察集中。这样的物种其实有不少。为什么会这样呢?这很可能表明生态系统出现了问题,出现了明显的衰退。不仅在保护区外面如此,不少自然保护区里面也是如此。很多保护区的物种组成,特别是动物的物种组成,即使跟几十年前相比,也发生了一些变化。

比如尖峰岭现在最好的森林是中高海拔地区的。中高海拔的森林,从结构和科属的组成上看,与南岭以南各地,如广东鼎湖山、黑石顶、广西的十万大山以及越南北部的植物科属组成是非常相似的,有很多壳斗科、樟科的大树。另一个地方,广东封开黑石顶,属于南亚热带常绿阔叶林,在当地的山坡上,乔木层有些树种,如蕈树、黑叶锥等也能达到50m高度。这些地方的森林物种组成复杂,种类十分丰富。

有人问,你不是讲森林恢复吗?而且是讲嘉道理农场森林的恢复,这些地方的森林跟你们的森林恢复有啥关系?

当然有关系,这是因为,只有了解了附近区域最好的森林,才能推测要恢复的森林是什么样子,知道物种组成的差距,才能知道应该从什么角度,用什么方法去恢复本地的森林。邻近地区保存很好的森林,可作为森林恢复的模板。

为什么要恢复植被?很显然,是因为植被退化了,不能再提供我们需要的功能了,而森林可能难以自己恢复,所以需要我们去恢复。

在讲我们做过哪些尝试之前,我们先看看森林是怎么破坏的。

2 森林破坏的一般模式

这幅地图展现的是亚洲的人类足迹,我们发现,人类没有到达的地方确实是很少了。不仅如此,对于植被的破坏或者人为干扰,在农业早期,也就是几千年前就已经开始了。

footprint.jpg

图3. 人类足迹 (来源 https://sedac.ciesin.columbia.edu/downloads/maps/wildareas-v2/wildareas-v2-human-footprint-geographic/hfp-asia.jpg)

地势平坦、低洼的地段,水源也丰富,适于人类居住和耕作,对于我国南部来说,这些地段也都是非常适合森林生态系统发育的。三四千年前,华南的森林比现在广布得多,当时环境可能也比现在温暖一些,那时,华南地区有亚洲象、犀牛、长臂猿等的分布。这些动物当中,很多已经在国内灭绝,或者现在的分布已经不在华南,而是分布在非常偏远或者非常狭窄的区域了。究其原因,除了人为猎杀,还有很大的原因就是毁林开荒,破坏了它们所依赖的生境。平原地区适于种植各种作物,特别是水稻。华南地区的水稻种植最晚在两千多年前的秦汉时期就已经开始了,也就是说森林破坏最晚从那时候就开始了。

多种人类活动,如农业、林业、城市化等都会导致植被退化。植被退化到一定程度,会有什么后果呢?我们以香港为例,看一下植被破坏后是怎样的。

3 香港森林的分布与特点

香港土地面积为1100多平方公里,分为香港岛、九龙和新界三部分,包括260多个海岛,其中面积最大的是大屿山。香港地形崎岖,主要是山地,最高峰是大帽山,海拔957m。年降水量约为2000毫米。降水在时间上非常不均匀,分为明显的雨季和旱季;空间上也非常不均匀,比如一些海岛,可能只有1800mm一年,而降水最多的是大帽山,年均达3000mm左右。年平均气温为22℃,因为位置靠南、靠海,平地的霜冻极少见,只有大帽山等几座“高山”上每年有几天有短暂霜冻。

2015071017114564 (1).jpg

图4. 香港地形 (来源: http://map.ps123.net/china/17862.html)

rainfall.jpg

图5. 香港平均年雨量分布图 (1981-2010) (来源:香港天文台 https://www.hko.gov.hk/tc/wxinfo/climat/rfmap.htm)

这样的温度和降水非常适合季节性雨林的发育。在不少植被区划中,香港属于北热带,跟雷州半岛、海南岛、广西西南部以及越南北部属于同一个气候类型,因为地理距离很近,植物科属组成也是十分相似的,种类十分丰富。不过,由于几千年来,特别是最近几百年来,受到农业、频繁人为山火等的破坏,香港的植被破碎化极为严重。第二次世界大战之后,很多地段划为郊野公园,在近些年发育出多样性较低的次生林。

在此之前,如19世纪中叶,英国人登上这座岛屿的时候就感叹,这个地方非常贫瘠,属于“不毛之地”。

最晚在明代或者清代,香港大部分地区已经开辟为农田,而山上不便耕种的地段被开垦为茶山,虽然大部分茶山在清末便已经荒废,但不少地方留下了石头垒起来的矮墙,至今从照片上仍然可见。

tree_planting.jpg

图6. 香港大帽山(北坡),上部分为草地 (摄影 张金龙)

第二次世界大战时,日本占领香港达3年零8个月,香港的植被遭受进一步破坏,树木不仅被大量砍伐用作军事用途,普通人还需要大量的薪柴做饭、取暖等,使植被遭到非常严重的破坏。1945年的航拍照片清楚显示,在大帽山附近,森林覆盖率只有大约0.2%。残存的森林只分布在山顶附近的溪流中。这些地方石头太多,不适于耕种或者种茶,位置偏远,人也难以到达。

在其他地方,也有一些植被较好的地段,大约有几种情况:

  1. 村边的风水林。在华南地区,很多村附近有一小片树林。人们相信这小片树林能保佑村民平安,所以不会砍伐,偶尔也会种一些树,希望树林越来繁茂。这种树林保存了比较多低海拔,特别是具有热带性质的植物,如黄桐、白颜树、华润楠、荔枝、土沉香、显脉杜英等,偶尔能见到吊皮锥、红皮糙果茶等稀有种类。
  2. 非常陡峭的山体、瀑布等地段,或者非常偏远,交通不便的地段。在这些地区,有时生长有非常稀有的种类,如南华杜鹃、大屿八角、孔药楠、蓝树、观光木等。

虽然香港面积还没有内地很多县的面积大,人口也达到750万,但是仍然保存有2200种原生的维管植物。

lamtsuen.JPG

图7. 香港新界大埔林村的风水林 (摄影 张金龙)

不过,由于香港的植被历史上受到的破坏很大,所以呈现出一些鲜明的特征:

4 森林自然恢复一段时间后的特征

  1. 物种组成改变:山顶和较高海拔的森林被草原代替。这种“草原”当然不是原生的,而是因为森林被破坏之后,原本在森林某些地段的阳生草本植物,扩散到它们适合的生境形成的,见于大帽山、八仙岭等新界北部各地,常见种类有鸭嘴草、芒、五节芒、鳞籽莎等。
  2. 物种多样性的改变:一般为物种数减少。森林被破坏之后,原本在某地区常见的种,可能就变得非常稀有,例如黄叶树,在华南地区是非常常见的种类,每公顷个体数最少应该在几百株以上,但是在香港却只有零星发现,个体数极少。一些广布的且在内地常见的树种,例如红锥,在香港目前只发现一个种群。
  3. 微环境的改变,物种更新困难:因为原本的森林生态系统被完全破坏,只有一些耐性非常好而且喜光的种类,如浙江润楠、短序润楠、白楸等,能够在草地上生长,逐渐恢复成结构简单的树林。而在山脊等非常暴露的位置或者频繁受到山火干扰的地段,一直是草地,很少有其他树种能够生长。
  4. 水土流失加剧。香港的降雨非常不均匀,有时24小时降雨量可达100-400mm,在这么强的降雨下,很多地方裸露的表土都被冲走了,由于淋溶作用的影响,土壤的营养物质极为匮乏。我们测量过嘉道理农场上山区森林恢复样地的土壤养分,其氮含量甚至低到仪器检测不到的水平。不难想象,在这样的地方,要进行森林恢复是十分困难的。

事实上,不同地段,因为破坏的程度不同,自然恢复的难度也不同,例如:

  1. 间伐:森林里面大树或名贵树种被砍。这种破坏对整个森林生态系统的影响比较小,但是对附生植物、野生动物以及树种的更新有较大影响。
  2. 皆伐:整片森林都被砍。乔木被破坏,但是灌木和乔木幼苗等大部分保存,种子库也未被破坏,如果有足够长的时间,有可能恢复为天然的次生林。
  3. 耕作:毁林开荒,林下层和种子库会被完全破坏。森林只能靠周围植被的种子和传播媒介更新。随着时间的推移,土壤层也被侵蚀和破坏。即使被森林生态系统包围,这种地段也是很难自然恢复的。
  4. 矿山:除了森林被完全破坏之外,矿山附近还伴随严重的土壤和水污染等,极难恢复。

除此之外,森林恢复能否取得成功,很大程度与还与恢复的策略,比如物种的选择、种植的方法等有关。

1970年以前,香港有不少大规模的植树计划,当局希望恢复森林,如在郊野公园范围里面种植了很多桉树、红胶木、白千层、台湾相思、马尾松等,这些树种有些已经种下去五六十年了,有些成功存活,但是它们生长的地段成了物种组成非常单一的树林,并不能算是真正的森林。有些种,如马尾松种植之后不久,就因为松材线虫、蚧壳虫等虫害、病害而大量枯死。现在,在香港几乎看不到马尾松了。这些人工林都没有按照传统的森林演替形成生物多样性更高的天然林。

5 森林能自己恢复吗?

森林恢复的重要性不言而喻,在健康的生态系统中,人能生活得也更舒服。但刚才也介绍了,香港有些地段的植被还可以,比如,大帽山的森林就是1945年那0.2%的森林恢复而来的,至今,大帽山山顶附近差不多也是植物物种组成也最为丰富的地段,我们去调查后也不断有新的发现,甚至发现了几十个香港新分布。那么问题来了,如果让森林自然恢复,不用太多人力物力,这不好吗?

我自己的答案是:在土壤被完全破坏,水土流失严重,自然恢复几乎是不可能的。主要原因如下:

第一,没有足够的种子能够自由传播到要恢复的地点,因为没有母树能够产生足够多的果实和种子,即使有点儿果实,果子狸、老鼠等动物天天惦记着,果实成熟之后,第一时间就被吃掉了。只有部分种类的种子能够在这种情况下存活。

第二,缺乏传播媒介。即使种子幸存,但是没有动物帮忙传播种子,种子就不能达到我们希望恢复的地方。有人说,有些种子是靠风或者重力或者水流传播,应该没问题。非常对,但是,这种情况下,因为传播方式的差异,有些种在天然恢复中比较成功,成为所谓的胜利者(winner species)。

第三,种子能不能萌发。假设种子能够传播到要恢复的地段,那么它们能顺利萌发并长出苗来吗?这涉及到种子所处地方的温度、光照、水分、土壤类型等。一般来说,种子都携带了母树给它的营养,很多种类能够供给几个星期甚至几个月的营养。问题是,不是所有的种类都能够萌发。究竟什么因素导致了种子不能萌发,不同种类有什么差别,这些都还需要研究。为了弄清楚原因,我们在农场内设置了实验,正在收集数据,希望能深入探讨。

第四,幼苗能不能生存和长大。幼苗能否长成幼树,也受到很多因素的影响,例如,水分、光照、疾病、同种的竞争、异种的竞争,动物取食、虫害、台风、旱灾、寒潮等等。这些因素中有些是相互重叠的。例如动物可能通过影响水分供给而影响幼苗的生存。有些动物能够非常准确地识别植物。比如,我们植树样地种了亚热带常绿阔叶林的常见种,石栎 ,但是野猪喜欢在它的根周围挖来挖去,我们样地里几乎每一棵石栎的根都被挖了。这些石栎的苗都没办法只能再次扎根,只能让从根部萌生了很多新的分枝,变成了灌木状。这样的树苗连生存都困难,也就失去了长成大树的机会。再比如,某种天牛非常喜欢在硬壳柯上产卵,幼虫将树皮环割,导致树苗枯死。另外,据重庆大学杨永川教授的研究,自然状态下,几千粒栲树的种子才能形成一棵幼苗。幼苗能不能生存,还跟土壤中的细菌和真菌有关,例如有些杜鹃必须要跟真菌形成菌根才能生存,豆科的绝大部分种类需要与固氮菌共生才能生存。在生境已经严重衰退的地方,这些有益的真菌和细菌是否存在,土壤退化后种类发生了哪些改变,都还不清楚,这方面的研究目前非常活跃。我们也正在跟北京林业大学等单位开展合作研究。

castlepeak.jpg

图8. 香港屯门青山的水土流失 (摄影 张金龙)

这张照片是香港屯门青山的水土流失情况,比大帽山的样地水土流失更严重。可以看到,这里土壤裸露,表土全无,有些地段只能见到鳞籽莎等。在这样的地方,森林的自然恢复几乎是不可能的。

6 人们希望恢复生态系统功能

有人要问,森林恢复不就是种树吗?这有什么好讲的。刨个坑,把树苗中下去,盖上土,再浇点儿水,就成了。

说得对,但是也不完全对,因为这是一般在公园、绿地里面种树的方法,而在亟需恢复的地段,种树要考虑的因素比这要复杂。而且,我们不仅仅是要把某一棵树种活,而是需要恢复整个森林生态系统的功能,包括固碳、涵养水源、防止水土流失等等。而且,我们还希望,在恢复的森林中,每个树种能够自我健康地更新,森林能跟天然森林一样,能够成为哺乳动物、鸟类的家园,能够具有和天然森林一样的景观文化价值。

7 人工恢复不如自然恢复吗?

恢复森林的多样性和全部生态系统功能是一种非常高的目标,目前来说,仍然是非常困难的。有人说,当代的最尖端的技术有几个,一个是太空探索;一个是对微观世界的探索,比如纳米技术、基因工程;另一个,就是在宏观尺度重建各种生态系统。前几个方向已经有各种进展,但是在宏观尺度重建生态系统目前还不知道怎样做到。如果人类能够成功恢复森林,就很可能能有效应对全球变化。但是,目前仍然有人怀疑人工恢复的成效。

两年以前,Science Advances上面有一篇论文,总结了全世界森林的恢复样地的恢复情况,最后认为人工恢复效果不如天然恢复。这篇论文发表之后马上引起了极大的反响。很快,就有生态学家指出,天然恢复的森林,一般来说,选取的样地是在森林容易自然恢复的地段;而人工恢复的样地,往往是矿山、或者植被严重退化的地段,这两种类型的样地,由于恢复的起点是不同的,不能直接简单比较。

为什么到现在还有生态学家觉得人工恢复没有自然恢复好呢?很大程度上是因为我们还不知道森林恢复的正确方法,不知道森林原本应该有什么物种组成和结构,不知道究竟需要把森林恢复成什么样。要恢复森林,我们首先要了解森林的复杂组成,这就是为什么要多了解邻近地区森林的物种组成和结构。

传统的森林演替模型说,如果一个地方,砍过之后,置之不理,大约能够在100-150年之内恢复到原始森林的状态。但是有研究发现,一个地区的森林能够恢复,取决于当地的物种库,如种子库或者幼苗是否存在,也取决于传播种子的动物等是否存在,取决于是否有持续的干扰等,并不是那么简单。研究发现,森林恢复过程中,生物量的恢复是容易的,也就是树冠层长得像原始森林一样大约需要80-100年的时间可能就够了,但物种组成恢复的中位数可能需要900-1000年。什么概念呢? 宋朝砍的森林,比如说,如果这一千年来没有经过太多的干扰,森林的物种组成才能和原始森林差不多。森林能恢复的前提是,所有的物种在生态系统中还存在。如果有些物种灭绝了,即使是本地灭绝,生态系统也可能就没有办法恢复到原始森林的状态了。

在这种情况下,也许要接受,进入人类世之后,某些生态系统再也没有办法恢复到以前的状态了。要将森林破坏后的植被恢复成健康的森林生态系统,提供必要的生态系统服务,支持野生动植物生存,需要从全新的角度考虑。

8 我们在做什么工作?

我们在大帽山有两种样地,一块是从2013年开始的,是从草地开始恢复的。另一块是从2018年开始的,是从天然恢复的润楠林开始。下面分别介绍:

8.1 在草地上恢复森林

明清时期,人们曾将大帽山较高海拔的地段开垦为茶园。清末,茶园逐渐荒废,植被退化,逐渐被草地所代替。过去,这些地段每隔几年或十几年就会受到一次山火的侵袭。

我们的森林恢复样地位于大帽山北坡,嘉道理农场暨植物园的最高处,海拔从500m到650m左右。我们每年都按照5m*5m的小样方种植几千棵树苗,分别设置为不同的实验处理。所以,不同年份种植的样方其实对应了不同的恢复生态学实验,尝试回答一些恢复生态学方面的问题。

所用树苗都是本土树种,目前,我们植物保育部有两个采集队,分别在香港的郊野公园采收种子,然后在苗圃培育树苗。

8.1.1 种子采集

在不同地点,采集种子后,编号并记录GPS信息。尽量在不同地点采集,以便提高所采集种子的遗传多样性,这样才能保证幼苗在种下之后,种群能够健康延续。有些稀有种由于很难采集到种子,也偶尔用采集来的枝条培育扦插苗。扦插苗的遗传多样性一般来说非常低,对于该物种的种群健康并不十分有利。不过,扦插苗所占的比例在我们的树苗中是非常小的。

8.1.2 播种和育苗

去掉果皮,清除果肉,播种到苗床。待幼苗几公分高时,移栽到塑料容器内。容器内装有沙土。这时候,每株幼苗都有自己的编号。在种植之前,需要测量幼苗的高度和基径。每一棵幼苗在种植之前,已经绑好了号牌。

IMG_20200813_122349_1_resized.jpg

图9. 嘉道理农场的本土树木苗圃 (摄影 张金龙)

8.1.3 种植

种植很简单,先用钢镐刨坑,深20-25cm,直径约30cm,将树苗根部的塑料袋去掉后再培好土。

参考CTFS (ForestGEO)大样地调查的方法,我们将样地划分成了20m20m 的样方,每个样方再划分成16个5m5m的小样方,向东为X,向北为Y。一般来说,每个5*5m样方是一种实验处理。

8.1.4 实验处理

IMG_8574.JPG

图10. 嘉道理农场的森林恢复样地,蓝色为树木保护罩 (摄影 张金龙)

8.1.4.1 树木保护罩 (Treeguard)

有蓝色保护罩、遮阴网等几种。保护罩能明显提高幼苗的生存率并促进幼苗的生长。目前我们认为保护罩有以下几种作用:

  1. 降低光照强度,模拟幼苗最适宜光照
  2. 降低风速,降低干燥效应
  3. 提高幼苗的顶端优势
  4. 降低幼苗被草食动物(牛、赤麂、豪猪等)取食的风险
  5. 抑制杂草的竞争

8.1.4.2 防草垫

每棵幼苗周围铺设了防草垫,防草垫由椰子纤维压制,用来能抑制杂草的生长。不过,从长势来看,似乎防草垫对树苗生长的影响不大。

8.1.4.3 生物炭+堆肥 biochar + decompost

生物炭(biochar)是一种在特殊温度下烧制的炭,在土壤中能够长期稳定存在,也能够改善土壤的通透性和结构等,促进幼苗生长,与堆肥一起,用于改善土壤性质。

8.1.4.4 木屑 mulching

也就是将树枝粉碎,铺在树苗周围。这是一种园艺上常用的方法,可促进树木生长,抑制杂草。在土壤贫瘠地段,木屑分解后也能增加土壤肥力。

8.1.4.5 有机肥、化肥

为了增加土壤肥力,有些年份的实验中,我们施用有机肥,而部分样方在2013年施用了极少量的化学肥料。

8.1.4.6 修剪

在草地或者灌木丛中生长出的树木,可能因为没有足够的竞争者,植株往往在很早的时候就分枝,甚至出现多分枝结构,这样的树木在天然的森林里面原本应该是非常少的,但是在恢复样地却比较常见。为了能让种下去的树木能够像森林里面的树木一样,我们在树木长到5m左右时对其中一些个体的侧枝进行了修剪。这也是林业经营中常用的促进树木生长的方法。修剪能够在一定程度上提高林下层的光照,为后续的生物多样性强化种植创造条件。

8.1.4.7 间伐/稀疏化(thinning)

随着树苗长大,树冠层逐渐形成。如果树苗种类非常单一,个体密度又太高,将来长成的树林是非常不健康的,生物多样性自然提高十分困难。据以往经验,在树苗种植后三十年或者五十年之后,树种密集而单一的树林,植物种类仍然将十分贫乏。而且,如果在初始阶段种植得过密,个体之间的竞争会更为激烈,每一株都不能健康成长。这种树林的郁闭度非常高,林下非常阴暗,其他种的幼苗,甚至本种的幼苗也都很难生存。有人问,那如果不种那么密不行吗?答案是不行。根据经验,如果在一开始种植的时候树苗很稀疏,那么每个个体从保护罩中长出来后,生长会变得很慢,树冠层很难形成,森林恢复项目很可能会失败。为了形成连续的林冠层,目前流行的方法有三个:

  1. 宫胁(Miyawaki)法:这是日本生态学家宫胁昭提出的一种方法,也就是一开始种植密度非常高,例如每20m*20m种植几千棵幼苗,但是我们没有办法获得那么多的原生树种的幼苗,所以这种方法对我们来说并不适用。
  2. 保护罩法:用保护罩将每棵幼苗保护起来,去尽量模拟林下的条件,保证幼苗生存和生长。
  3. 抚育树法:先种一些能够快速生长的幼苗,作为抚育树(nurse crops),等到林冠层形成的时候,再砍掉一些,为后续种植创造合适的条件。

我们目前是将第二种和第三种方法结合,因此既要用保护罩,又要砍掉一部分抚育树。但什么样的树该砍,什么样的不该砍呢?有什么标准?目前仍然不清楚,只能说有一个原则,就是同一种植物,密度不宜太高。如果这些个体与要保留的某些个体有显著的竞争关系,则应该砍掉。

8.1.4.8 补种

为了提高样地的物种多样性,因此采用两步种植法。也就是在砍掉部分抚育树之后,再种植其他的:(1)树苗;(2)灌木;(3)草本;(4)附生植物等,以保证不同层的种类,在森林人工恢复的早期就存在,而不是在第一批树长大之后再自然出现。

8.1.5 数据收集

虽然有各种实验处理,但是我们仍然只能采集一些基本信息,比如幼苗的坐标和高度、基径等。要测量的指标,除了实验处理,还有:

  1. 位置:幼苗的X、Y坐标,然后转换为HK80坐标
  2. 物种:物种以及每个种的采集地点,一般在种子采集的时候,就已经鉴定到种了
  3. 基径:地面上5cm的直径
  4. 胸径:对于高度超过1.3m的植株,测量胸径
  5. 高度:也就是顶芽到地面的高度
  6. 冠幅:树冠的长轴和短轴
  7. 病虫害程度
  8. 整体表现:比如很好、一般或很差

除此之外,还要记录测量人、记录人等。数据收集好之后,输入Excel存档,以便进一步分析。

8.2 恢复浙江润楠、短序润楠和刨花润楠组成的次生林

IMG_20200827_145500_resized.jpg

图11. 以往的植树计划, 林下层很难恢复 (摄影 张金龙)

IMG_20200622_113058_resized.jpg

图12. 林下补充种植 (摄影 张金龙)

大帽山上天然恢复的森林,建群种多为浙江润楠、短序润楠、刨花润楠等,而其他亚热带建群种,如壳斗科、木兰科、金缕梅科、冬青科、山矾科、大戟科、桃金娘科植物都难以在短时间(几十年)内恢复。这些润楠林的种类单一,结构简单。一旦有严重的病虫害爆发,后果不堪设想。而且,目前已经发现一种由甲虫传播的真菌,导致大量润楠个体死亡。润楠死亡后,润楠的幼苗因为存在优先效应(priority effect),很可能又占据了林隙,长成大量幼苗和幼树,继续成为优势种。另外,天然恢复的润楠林, 以及有些植树计划种植的树林,林下过于阴暗,大部分树种的幼苗难以生长。不难想象,这些润楠林很难按照经典的森林演替模式演替,而是形成所谓的演替锁定(arrested succession)现象。这种现象是在植被破坏到一定程度后,物种无法自由传播和定植,优先效应导致优胜者(winner species)能够长期占据某一生境造成的。大帽山上天然恢复的润楠林以及以往种植的种类单一的树林,很可能进入了这样一种状态。因此,有必要开展实验研究,探讨怎样解除演替锁定。为此,我们尝试砍掉或者修剪了部分润楠个体,补种了更多种类,以提高多样性。

8.2.1 砍伐以及修剪

为了提高林下层的光照强度,大约要砍掉了一半左右的润楠个体,并对剩余个体的树冠进行修剪。

8.2.2 补种其他种类

补种什么种?我们补种了森林里面可能出现的: (1)其他常见树种;(2)灌木;(3)草本;(4)附生植物的幼苗。现在项目仍然在进行中。

8.2.3 监测什么?

当前主要是监测乔木幼苗和幼树的高度和基径等。对于其他植物,如附生种和草本植物,目前并没有统一的监测方法,我们正探讨如何进行如何对灌木、草本和附生植物的各种生长指标进行标准化。在环境因子方面,为了探讨影响每株幼苗生长的环境,每一棵幼苗我们都用鱼眼镜头拍摄了林冠覆盖度的全景照片。另外,我们也已经开始用无人机和激光雷达(Lidar)拍摄照片或者采集数据,尝试重建森林的三维结构,并据此推断每棵树苗的各种环境指标。

8.3 恢复生态学实验的矛盾

在恢复生态学中,样本量是非常重要的问题,各种恢复生态学中的实验处理,往往很难达到足够的样本量。要有足够的样本量,往往需要很大的面积,或者需要很多的个体。但是如果样地中“稀有种”的个体数远远高于在自然界中应有的数量,森林的物种组成必然又将严重偏离自然群落。由于每个种在生态系统中扮演的角色可能也是不同的,如果森林中稀有种的组成于显著偏离于天然群落,从长期来看,物种是否能稳定共存,还有很多不确定性。另外,这样的样地能够提供的生态系统服务与天然生态系统提供的服务是否一致也需要进一步评估。

9 结论与展望

综上,恢复生态学正处于转型的重要阶段,森林恢复是需要投入大量人力、物力的,凭借现在的知识和技能,目前人们还很难将森林恢复成与原始森林生态系统一样的水平。也就是说:

• 现有的森林恢复项目,在多样性上是远远不足的。

• 没有人知道森林恢复需要多长时间,目前只能尝试用各种方法,尽量在短时间恢复森林的物种组成以及结构。

• 对于生境破坏很严重的地段,只能凭经验选择用于恢复的树种。

• 森林恢复实验在样本量上一般难以达到统计上显著,在数据分析上也可能需要另辟蹊径。

• 以恢复多样性和生态系统结构和功能为目的森林恢复项目需要非常多的人力物力投入,在很大的空间尺度上是不容易做到的。

保护现存的天然植被,仍然是重中之重。努力理解和恢复复杂的森林生态系统,还有很长的路要走。要弄清楚这些关系,成功的恢复森林,就要走到森林里面去,去观察,去思考,去归纳总结。只有设身处地了解每种植物从种子到大树经历过什么困难、需要什么帮助,才能突破森林恢复的瓶颈。

致谢

最后,非常感谢各位的关注。感谢嘉道理农场暨植物园植物保育部主管Gunter Fischer博士分享自己的宝贵经验和想法。感谢每一位参与森林恢复项目的同事,感谢嘉道理农场暨植物园对项目的支持。

群落系统发育研究不能脱离理论框架

导读

群落系统发育(community phylogenetics)研究最初是为了探讨群落内物种共存而提出的,但近些年不少研究逐渐脱离了其理论框架,如(1)有些研究将系统发育理论框架用于群落以外的地理尺度,但没有充分考虑地理和历史过程的影响;(2)缺乏对物种的功能性状进行系统发育信号(Phylogenetic signal)检验;(3)将群落内的部分种类(如特有种、外来种、入侵种等)分出来,分别计算群落系统发育指数,但是仍然按照群落物种共存的理论框架去推断各种生态学过程的相对重要性。这些做法严重偏离了群落物种共存的理论框架,所做推断可能是毫无意义的。

本文首先介绍了什么是系统发育指数(Net Relatedness Index, NRI)、零模型(Null models)并介绍了其相关的生态和统计意义,随后探讨了为什么将部分种(如入侵种、特有种)从群落中提出来计算群落系统发育指数(NRI)是不可取的,并探讨了常见的群落系统发育理论框架被误用的不同情形。

本文主要是根据近期回复的邮件整理的,因此为问答体。因本人学识有限,有很多地方可能存在认知不足甚至错误,此处主要是希望抛砖引玉,欢迎读者共同探讨。

问:啥是NRI?

答:NRI是Net relatedness index的缩写,是根据群落内出现的物种之间的系统发育平均距离(MPD_observerd, Mean Pairwised Phylogenetic Distance),再用零模型生成群落的物种之间的系统发育平均距离(MPD_null)标准化之后计算出来的,其公式为:

NRI = -1*(MPD_observerd-mean(MPD_null))/sd(MPD_null)。

因此,NRI其实是Standard Effective Size(SES)加一个负号,与数据标准化(standardisation)十分相似。

问:啥是零模型(null model)?

群落系统发育研究中的零模型是物种随机化的方法,例如tip-shuffling是将物种的标签在进化树上随机打乱,从而获得物种完全随机排列时MPD的统计分布,如进行999次随机化,就生成了999个随机化后的群落,再分别计算这些群落的系统发育平均距离(MPD),最终得到999个MPD_null。由于NRI的计算涉及的零模型有多种,所以要注意零模型的选择,具体可参考PhyloCom或者picante软件的说明。

问:NRI本身有统计意义吗?

答:NRI是有统计意义的,因为NRI的本质是standard effective size。有些作者假设NRI符合正态分布,则-1.96或者1.96就是其95%置信区间的阈值。

问:研究发现,外来种的NRI指数随着海拔升高而降低,如果将外来种从群落中提出来,专门计算群落中外来种的NRI,有生态学意义吗?

答:外来种的NRI指数随着海拔升高而降低,表面上是可以说在高海拔地区外来种在系统发育上相比低海拔不那么聚集。不过,NRI是和物种数有一定关系的。这主要是由于MPD的值取决于物种在整个地区进化树上的分布。物种数越多,某一个样方的物种在进化树上占有的比例就越高,也越可能呈现出系统发育发散的情况。目前还没有看到一种有效的方法能够用物种数将NRI标准化。

问:比较群落中外来种NRI和特有种的NRI是否有生态学意义?

答:在提出NRI时,Webb等人主要是为了探讨群落的物种共存机制。在他们的理论框架中,如果群落内物种的功能性状在进化树上是保守的,也就是有显著的系统发育信号(Phylogenetic signal),同时,如果群落内物种的系统发育关系与随机的群落(就是零模型群落)相比显著聚集或者发散(超过观测值的97.5%上分位数或者低于2.5%下分位数)就说明群落组成很可能不是随机的。既然物种组成不是随机的,则应该认为生态位过程(niche-based process)起着重要作用,意味着生境对物种性状有很强的筛选作用(environmental filtering),导致群落呈现出观察到的物种组成。

起初,Webb的研究是在Gunung Palung大样地中进行的,他只分析了DBH>10cm的木本植物,继而探讨了NRI指数的意义等。对于他所研究的问题,上述处理在某种程度上是合理的。但是,后续有很多研究在并不满足Webb等提出的理论框架下仍然按照其理论框架推断各种生态学过程,这些分析和推断在很大程度上可能是错误的。

主要表现在:

  1. 没有对物种的功能性状进行系统发育信号检验。物种共存往往是通过功能性状起作用的,只有系统发育关系相近的种拥有相似的功能性状,也就是存在显著的系统发育信号时,Webb等的理论框架才能成立,而很多研究往往没有做这个检验,因此并不一定满足群落系统发育理论框架。
  2. 所研究物种在群落间不能自由传播。将某一个类群,或者符合某种地理分布类型的物种,如中国特有种、外来种等专门拿出来计算NRI,虽然从技术上NRI可以计算,但在一定程度上并没有满足群落系统发育分析的理论框架。这主要是因为,这些分析不能保证入侵种在所有样地已经“完全入侵”,受到入侵种传播先后的影响,在有些地段,入侵种还处于入侵早期,或者还没有开始入侵,但是如果将这种格局归结于生态位过程的影响,生态位过程在物种共存中的作用就会被高估。
  3. 忽略种间相互作用的影响。Webb等的理论框架一般将群落内所有种间相互作用考虑为随机过程,这些相互作用是难以量化的。如果只考虑群落中的一部分种,可能会造成这些种和其他未考虑的种之间种间相互作用如竞争(competition)、促进(facilitation)被完全忽略。研究表明,种间相互作用对群落物种共存有很显著的影响。举例来说,在植被较好的地段,外来种较难入侵,这种情况,按照群落物种共存的理论框架,生态位过程的作用就会被高估。
  4. 零模型的物种库选择不当。NRI计算中涉及的零模型,很可能与物种数、物种库(species pool)的选择有很紧密的关系。若计算NRI时的零模型没有经过物种丰富度校正,那很可能就不能对NRI进行比较。用于计算两个NRI的零模型群落,物种库的范围也可能不同。例如,计算外来种NRI的零模型中,物种也可能都是外来种,但是计算特有种NRI的零模型中,物种很可能为特有种,这就造成了物种组成随机化的基准不同,偏离了群落系统发育的理论框架。
  5. 在地理尺度的物种组成研究中,没有充分考虑气候、地质历史以及进化过程的影响。生物地理研究一般是在较大的空间尺度开展的,在这种空间尺度下,物种可能并不能在研究的区域内自由传播(dispersal)、定植(colonisation)和存活(persistence),如样方或采样区域存在很高的海拔差异,或者分散在几百到几千平方公里的范围内,而同时物种存在同域或者异域物种形成,且不少地区物种分布又受到冰期、全球变暖等的影响,这种情况下,群落物种共存的理论框架并不适用,讨论物种共存时必须要考虑不同尺度的生态学过程以及气候、历史事件的影响。
  6. 分析中忽略人为干扰的作用。实际观察到的群落往往都受到不同程度人为干扰,而人为干扰对于群落的物种组成的影响非常大。群落内物种组成的恢复也可能需要几百年到上千年,同时也可能受到如优先效应(priority effect)以及演替锁定(arrested succession)的影响。即使物种在研究区域内能够自由传播,也并不意味着其能够自由定植、生长,因此,在人为干扰严重的地段,进行群落系统发育研究时必须考虑人为干扰以及其他生态学过程的影响。

综上,比较外来种和特有种的群落系统发育结构是要非常慎重的,因为如果不满足理论框架,比较相关指数就不能帮忙解决物种共存机制上的理论问题,此时做出“随机过程主导”或者“生态位过程主导”的推论也就毫无意义了。

WGS84坐标和HK80坐标之间的相互转换

HK80(Hong Kong 1980 Grid System)是香港的一种坐标系(EPSG:2326),一般用于地图绘制、工程勘测、树木调查等。不过,生态学研究中最常用的坐标系为WGS84(EPSG:4326),例如GPS一般就是直接给出WGS84的经纬度,Google Earth等也用WGS84坐标系。那么HK80坐标如何转换为WGS84坐标呢?

香港地政署测绘处给出了测量基准说明(https://www.geodetic.gov.hk/common/data/pdf/explanatorynotes_c.pdf), 其中有非常详细的转换公式。根据这些公式,本人曾于2014年编写了HK80 R程序包(https://cran.r-project.org/web/packages/HK80/index.html)。

近几年来,也有不少新工具诞生:例如,香港地政署测绘处的HK80坐标在线转换工具(https://www.geodetic.gov.hk/en/services/tform/tform.aspx )公开了API,该API可以根据用户在网址中传入的参数返回json数据。sf程序包也在proj程序包的基础上开发了st_transform函数,让不同坐标系之间的转换变得非常方便。也有人基于pyproj(https://pyproj4.github.io/pyproj/stable/#,https://proj.org/)开发了hk80 python程序包(https://pypi.org/project/hk80/)等。

本文给出在R中进行WGS84和HK80坐标相互转换的三种方法,其中首选为香港地政署的在线转换工具,但是由于服务器可能会有一定的限制,如果有大量数据需要准换,访问会较为频繁,用户IP可能受限。下载到本地的sf和HK80程序包就没有这些限制。sf和HK80的程序包的结果都是可靠的。相比之下,在sf中建立坐标点并进行转换批量转换更为方便。HK80程序包的结果可以作为参考。

地理坐标转换常涉及度、分、秒和十进制的转换,本文也给出两种方法,作为附录,以方便读者。

HK80GRID坐标转换为WGS84坐标

The HK80 R package

1
2
3
4
library(HK80)
HK1980GRID_TO_WGS84GEO(N = 820359.389, E = 832591.320)
## latitude longitude
## 1 22.32225 114.1412

The official online conversion tool

the Geodetic Survey Section, Lands Department, Hong Kong SAR Gov.

API example: http://www.geodetic.gov.hk/transform/v2/?inSys=hkgrid&e=832591.320&n=820359.389

1
2
3
4
5
6
7
8
library(jsonlite)data1 <- fromJSON(" 
names(data1)
## [1] "wgsLat" "wgsLong" "hkLat" "hkLong" "utmGridZone"
## [6] "utmGridE" "utmGridN" "utmRefZone" "utmRefE" "utmRefN"
data1$wgsLat
## [1] 22.32224
data1$wgsLong
## [1] 114.1412

The sf package

1
2
3
4
5
6
7
8
9
10
11
library(sf)
## Linking to GEOS 3.8.1, GDAL 3.1.1, PROJ 6.3.1
p1 = st_point(c(832591.320, 820359.389))
sfc = st_sfc(p1, crs = 2326)
(st_transform(sfc, 4326))
## Geometry set for 1 feature
## geometry type: POINT
## dimension: XY
## bbox: xmin: 114.1412 ymin: 22.32224 xmax: 114.1412 ymax: 22.32224
## geographic CRS: WGS 84
## POINT (114.1412 22.32224)

WGS84 坐标转换为HK80GRID坐标

The HK80 R package

1
2
3
4
library(HK80)
WGS84GEO_TO_HK1980GRID(latitude = 22.32224, longitude = 114.14118)
## N E
## 1 820358.7 832591.4

The official online conversion tool

from the Geodetic Survey Section, Lands Department, Hong Kong SAR Gov.

1
2
3
4
5
6
7
8
9
10
11
# Copy the following URL to browser
#
# {"hkN": 820358.910,"hkE": 832590.508,"hkpd": 26.009}
library(jsonlite)
data1 <- fromJSON("
names(data1)
## [1] "hkN" "hkE" "hkpd"
data1$hkN
## [1] 820358.9
data1$hkE
## [1] 832590.5

The sf package

1
2
3
4
5
6
7
8
9
10
library(sf)
p1 = st_point(c(114.14118, 22.32224))
sfc = st_sfc(p1, crs = 4326)
(ccc <- st_transform(sfc, 2326))
## Geometry set for 1 feature
## geometry type: POINT
## dimension: XY
## bbox: xmin: 832590.5 ymin: 820358.9 xmax: 832590.5 ymax: 820358.9
## projected CRS: Hong Kong 1980 Grid System
## POINT (832590.5 820358.9)

附录: 度、分、秒和十进制格式的相互转换

Using the sp package

1
2
3
4
5
6
7
8
9
10
11
library(sp)
dd2dms(114.14118)
# decimal to Degree, Minute, Second format
## [1] 114d8'28.248"E
as.numeric(dd2dms(114.14118))
#
## [1] 114.1412
char2dms("47d15'6.12\"E")
## [1] 47d15'6.12"E
as.numeric(char2dms("47d15'6.12\"E"))
## [1] 47.2517

Using the biogeo package

1
2
3
4
5
6
7
8
9
10
library(biogeo)
res <- dms2dd(47,15,6.12,"E") # ns letters (N,S,E,W)
print(res)
## [1] 47.2517
dd2dmslong(114.14118)
## xdeg xmin xsec EW
## 1 114 8 28.2 E
dd2dmslat(22.32224)
## ydeg ymin ysec NS
## 1 22 19 20.1 N

进一步阅读

十年后遇见真实的生态学

十年后遇见真实的生态学

题记:这篇是杂感,最早发布于本人朋友圈。最近读文献,还有听圈内传言各种事件,感觉颇为烦闷,故有此篇短文。本文纯属个人感受,未必客观,如有雷同,纯属巧合。

十多年前,就是本人刚开始接触生态学文献的时候,怎么也想象不到十年后的学科会发展成现在这样子。

明明是森林监测,但做几十、几百个样方已经远远不够,一定要监测几十万、上百万棵树的生长,甚至比较十几个、几十个大样地,仿佛这样才能做出有意义的结果,才够“高大上”。当然,对大样地来说,似乎容易做的各种分析也都做完了,亟需新的生长点。

明明是森林调查,却偏偏要用无人机载着激光雷达或者由工作人员背着地面雷达系统扫描一次或多次,或者用光谱分析,监测出各种指标的细微变化。不管物种能否鉴定出来,鉴定是否准确,先发篇文章,说“几年以后,人类将定位全世界每一棵树”,吸引下公众的眼球。

谈到全球变化必然是大型增温、降雨实验,小打小闹根本“上不了台面”。

以前,在某种压力下,科学家不得不关心碳。现在,科学家依旧关心“碳”,不过也有人开始真正思考森林的生态系统功能,而不仅仅是生物量累积。越来越多人知道,健康的森林本身就具有很高的生态学和审美、文化价值,不仅具有高度的生物多样性,更是多种动物、菌物、微生物的家园,而不仅仅是碳和生物量。

物种分布模型相关的研究,传统的模型评价指标现在很多已被否定,机器学习方法大行其道,Maxent成为其中的王者。这种情况下,以前很多种模型给出的结果,其意义本身就成了问题,也许只属于在黑暗中的摸索,会慢慢消失在历史深处。而从数据量上,建模用到的物种分布数据动辄几十万条,甚至可能几亿条,然而并不是所有人都关心数据的质量和采样偏差。

物种的性状、气候适应性等都要都放到进化树上,做个极大似然、贝叶斯,用到蒙特卡洛马尔可夫链Metropolis coupling或者吉布斯抽样或者ABC,继而推断进化历程是怎样的。新奇的玩儿法出现后马上有人模仿,然而其中很多人并不理解生态位的意义和限制,也不太了解这些模型的机理以及条件。“别人用,我就用,文章发出来就好”,以致荒唐的结果层出不穷。

谈到土壤微生物必定二代、三代高通量测序,鉴定出来的新分类单元几千个、几万个,仿佛人人都成了土壤微生物学家。

谈到进化树,轻则一定要转录组、简化基因组,重则几百上千个全基因组。“没有基因组不成席”,几个基因建树只能做练习用,谁用在实际研究中只能被鄙视……建树的序列数一定要成千上万,但是研究者对大多数所研究的物种根本不认识,甚至拉丁名也写错,也更不知道那些全基因组中基因的功能,全基因组只相当于一条鉴别物种用的序列。

不少人在会议上大谈植物保护,却鲜有到野外,不清楚物种究竟面临着怎样的威胁,也不知道具体应该怎样保护,没人知道这些植物在生态系统中有什么功能,对生境和气候的要求有多苛刻,为什么濒危、怎样繁殖、与动物有什么关系等。南美洲和东南亚的原始热带雨林仍然遭到砍伐,虽然没有人知道怎样恢复破坏后的植被,却有人依然宣称热带森林可以恢复,甚至说天然恢复是最好的办法。那么请问,如果某座山上原有2000种植物,恢复项目种了十种八种树,森林就恢复了吗?功能跟破坏前一样吗?各种动物就能在此安居乐业、和谐共生了吗?

每个人都看好大数据和人工智能,却又不知道究竟怎样才能将其与自己的研究很好结合。R语言和Python是必须掌握的,因为它们是大数据和人工智能的重要工具,用它们实现的新方法、新技术层出不穷,但是新技能学会了,马上就过时……

写博客已经过时,博主们似乎大多已接近退休年龄或者已退休。不少微信公众号为了吸流量、为了赚钱不惜秀各种下限,最后只能取关。

十几年前,生物统计课程都还只涉及方差分析、t检验、线性回归,而现在入门级技能是混合模型、meta分析,结构方程模型(SEM)、多元回归树、随机森林、空间信息处理……不免让人感叹大学能提供的教育还真是少得可怜。不了解现在大学教学是怎样的,希望一切有所改观。

植物鉴定、植物标签识别全用人工智能,据说一部手机就能顶一个分类学家,事实是否真是如此?其实懂植物学的人都持保留态度。植物标本数字化用传送带,每天拍照可以达几千件、上万件……数据收集高度依赖手机等智能终端。而在线物种图库,如动辄几千万张照片,背后是成千上万的专业人士和民间爱好者在贡献自己的力量。

招聘会一定要包装成青年论坛,以体现单位的“求贤若渴”。论坛必须线上,文章必须top,必须一区,然而评委教授们达到要求的也没有几人。职位往往少得可怜,数不清的青年才俊为一个岗位争破了头,好像鱼儿争食一样。博士研究生、博士后们仍然每天为论文发愁,仿佛还是十年前的老样子。论文靠数篇数,就好像科学贡献真跟篇数成正比一样。对助研们的要求是三年五到七篇SCI,且必须有基金到手,否则非升即走。

圈内人与人之间的关系,既紧密又疏离,不知道哪天自己微信就被删,或者把对方删了……一切要看自己和对方的耐心与心情。

或许这就是学科发展的现状,也是生活的现状。这一切是好,还是坏呢?

总感觉现代生态学面临重构,而一些所谓重大问题,或许在新时代根本已经不是问题。

十年以后,这学科会发展成什么样呢?下一个十年,有多少人能与时俱进呢?有多少知识和技能会老化,会被淘汰呢?

2020年12月7日

tmap手工调整采样点地图的图例

tmap是用来绘制地图的R程序包,作者是荷兰统计学家Martijn Tennekes (https://github.com/mtennekes/tmap)。tmap结合sf、sp等程序包,绘制设色地图、点分布图、栅格图等十分方便,本博客以前也有介绍。

不过,tmap在绘制复杂的采样点分布图时,默认的图例往往不太理想。tmap用点的形状、颜色分别表示采样点的类型(如森林、湿地、草原),用大小表示数量(物种丰富度等),此时,形状、颜色和大小三个维度是分开的,图例也默认相应分开,而这并不是用户想要的,因此需要对代码进行修改。

本文给出一些示例代码,主要参考Xu S. et al. (2020)论文和附件。相应数据和代码可在 https://github.com/helixcn/ecoinformatics 下载。

读取数据

图中需要有指北针和比例尺,要求用蓝色实心三角,表示森林(forest);绿色实心圆点,表示草地(grassland);藕荷色实心菱形,表示湿地(wetland)。

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
setwd("/Users/jinlong/Documents/ecoinformatics/2020-11-29_tmap/")
library(tmap)
library(tmaptools)
library(sf)
## Linking to GEOS 3.8.1, GDAL 3.1.1, PROJ 6.3.1
library(sp)
library(openxlsx)

rm(list = ls()) # 删除工作空间中原来的对象
sites <- read.xlsx("rspb20202063_si_002.xlsx")
head(sites)
## Variable References Country Latitude Longitude
## 1 Aboveground biomass Liu et al. 2017b Germany 51.33857 12.378462000000001
## 2 Aboveground biomass Liu et al. 2017b Germany 51.33857 12.378462000000001
## 3 Belowground biomass Brassard et al. 2011 Canada 49.50000 -89.6
## 4 Belowground biomass Brassard et al. 2011 Canada 49.17000 -89.83
## 5 Belowground biomass Finér et al. 2017 Spain 40.70000 −1.9
## 6 Belowground biomass Finér et al. 2017 Spain 40.70000 −1.9
## MAT.(℃) MAP.(mm) Ecosystem Duration Plant.diversity.level Plot.area.(m2)
## 1 9.545 544 forest 0.29 2 0.0881
## 2 9.545 544 forest 0.29 4 0.0881
## 3 2.500 712 forest 1.00 NA 400.0000
## 4 0.600 823 forest 1.00 NA 400.0000
## 5 10.200 499 forest NA 2 900.0000
## 6 10.200 499 forest NA 3 900.0000
## LnRR
## 1 0.06509796
## 2 0.31643103
## 3 0.53959844
## 4 0.32157929
## 5 -0.36161104
## 6 -0.62003058
sites$Longitude <- as.numeric(sites$Longitude)
# 某些Longitude或者Latitude记录可能为空,不能识别为numeric类型,因此先要用as.numeric转换。
## Warning: NAs introduced by coercion
sites$Latitude <- as.numeric(sites$Latitude)

sites <- sites[!(is.na(sites$Longitude)|is.na(sites$Latitude)),]
# 去掉Longitude和latitude为NA的记录
# 建立spatial data.frame
coordinates(sites) <- ~Longitude+Latitude
proj4string(sites) <- CRS("+proj=longlat +datum=WGS84") # 设定WGS84投影
head(sites)
## class : SpatialPointsDataFrame
## features : 6
## extent : -89.83, 26, 47.3, 51.33857 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +datum=WGS84 +no_defs
## variables : 10
## names : Variable, References, Country, MAT.(℃), MAP.(mm), Ecosystem, Duration, Plant.diversity.level, Plot.area.(m2), LnRR
## min values : Aboveground biomass, Brassard et al. 2011, Canada, 0.6, 544, forest, 0.29, 2, 0.0881, -0.217864917184295
## max values : Belowground biomass, Liu et al. 2017b, Romania, 9.54499998254081, 823, forest, 1, 4, 900, 0.539598438991999
world <- read_sf("world20200121_polygon.shp")
#读取shape文件(注意:本图为多边形,没有九段线)
st_crs(world) <- 4326 # 确定WGS84投影

绘制采样点分布图

默认情况下,地图的图例有三种,分别按照颜色、形状和大小给出。

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
## 01
map01 <- tm_shape(world) +
tm_borders("grey60", lwd = 1) + # 国界线为灰色
tm_shape(sites) +
tm_symbols(shape= "Ecosystem",
alpha = 1,
col = "Ecosystem", # 点的颜色按照Ecosystem显示
border.lwd = 2,
palette = c("blue", "seagreen4", "magenta2"), # 指定三种颜色
shapes = c(17, 19, 18), # 点的形状按照Ecosystem显示,分别为17、19、18
size = 0.3,
labels = c("forest", "grassland", "wetland"), # 点的名称设定为forest、grassland、wetland
title.col = "Ecosystem", # 图例名称为Ecosystem
legend.col.show = TRUE, # 在图例中显示颜色
legend.shape.show = TRUE) + # 在图例中显示形状
tm_scale_bar(breaks = c(0, 2500, 5000, 10000), # 比例尺
position=c(0.60, 0.0), # 比例尺在地图中的位置
text.size = 1) +
tm_compass(type = "4star", # 指北针类型
position=c("right", "top"), # 指北针位置
size = 2.5) + # 指北针大小
tm_layout(inner.margins=c(0.12,0.03,0.08,0.03), # 地图边缘的大小
legend.stack = "horizontal", # 图例排列
fontfamily = "FreeSerif") + # Times New Roman (MacOS)
tm_legend(position=c(0.05, 0.20), # 图例放在图左下角
legend.text.size = 0.8,
legend.title.size = 1.2) +
tm_add_legend(
type = "symbol",
title = "Ecosystem" # 图例标题
)

map01
## Scale bar set for latitude km and will be different at the top and bottom of the map.

## 8inches by 5 inches, 600dpi
# jpeg("map01.jpeg", width = 8*600, height = 5*600, res = 600)
# map01
# dev.off()

更改图例后的地图

用tm_add_legend手工调整:

1
2
3
4
5
6
tm_add_legend(
type = "symbol",
labels = c("grassland", "forest", "wetland"),
col = c("seagreen4", "blue", "magenta2"),
shape = c(19, 17, 18),
title = "Ecosystem")

更改后的代码:

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
# 02map02 <- tm_shape(world) +
tm_borders("grey60", lwd = 1) +
tm_shape(sites) +
tm_symbols(shape= "Ecosystem",
alpha = 1,
col = "Ecosystem",
border.lwd = 2,
palette = c("blue", "seagreen4", "magenta2"),
shapes = c(17, 19, 18),
size = 0.3,
labels = c("forest", "grassland", "wetland"),
title.col = "Ecosystem",
legend.col.show = FALSE,
legend.shape.show = FALSE) +
tm_scale_bar(breaks = c(0, 2500, 5000, 10000),
position=c(0.60, 0.0),
text.size = 1) +
tm_compass(type = "4star",
position=c("right", "top"),
size = 2.5) +
tm_layout(inner.margins=c(0.12,0.03,0.08,0.03),
legend.stack = "horizontal",
fontfamily = "serif") +
tm_legend(position=c(0.05, 0.20),
legend.text.size = 0.8,
legend.title.size = 1.2) +
tm_add_legend(
type = "symbol",
labels = c("grassland", "forest", "wetland"), # 图例的标签
col = c("seagreen4", "blue", "magenta2"), # 图例颜色
shape = c(19, 17, 18), # 图例
title = "Ecosystem"
)


map02
## Scale bar set for latitude km and will be different at the top and bottom of the map.

## 8inches by 5 inches, 600dpi
# jpeg("map02.jpeg", width = 8*600, height = 5*600, res = 600)
# map02# dev.off()

附:绘制欧洲部分的地图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 03map03 <- tm_shape(world,
xlim = c(-15, 40), # 经度范围
ylim = c(35, 70)) + # 纬度范围
tm_borders("grey60", lwd = 1) +
tm_shape(sites) +
tm_symbols(shape= "Ecosystem",
col = "Ecosystem",
palette = c("blue", "seagreen4", "magenta2"),
size = 0.2,
shapes = c(17, 19, 18),
border.lwd = 1.8) +
tm_scale_bar(position = c("left", "top")) +
tm_layout(legend.show = FALSE, fontfamily = "serif")

map03
## Scale bar set for latitude km and will be different at the top and bottom of the map.
1
2
3
4
## 4 inches by 5 inches, 400dpi
# jpeg("map03.jpeg", width = 4*400, height = 5*400, res = 600)
# map03
# dev.off()

参考:

  • Xu, S., Eisenhauer, N., Ferlian, O., Zhang, J., Zhou, G., Lu, X., Liu, C., & Zhang, D. (2020). Species richness promotes ecosystem carbon storage: Evidence from biodiversity-ecosystem functioning experiments. Proceedings of the Royal Society B, 287(1939), 20202063. (https://doi.org/10.1098/rspb.2020.2063)
  • Tennekes M (2018). “tmap: Thematic Maps in R.” Journal of Statistical Software, 84(6), 1-39. doi: 10.18637/jss.v084.i06 (https://doi.org/10.18637/jss.v084.i06).

种间联结和生态位重叠的计算:spaa程序包

群落尺度上,物种的生态位是指其在群落中利用资源的能力(张金屯, 2004)。生态位在物种的多度,群落多样性维持等多方面具有重要的意义(杨利民等, 2001)。生态位可以通过物种的生态位的宽度,物种生态位重叠等量化,国内在这方面已经有较多研究(如孙中伟和赵士洞, 1996; 郭志华等, 1997; 史作民等, 2001; 李军玲和张金屯, 2010; 王乃江等, 2010),但分析过程缺乏统一的平台,很容易引入错误,而且群落数据处理及绘图等也都较为繁琐,为了简化种间联结和生态位重叠的相关流程,我们编写了spaa程序包。

spaa是SPecies Association Analysis 的缩写,该程序包可对群落数据进行简单处理,计算物种的生态位宽度和种间的生态位重叠,绘制相应的半矩阵图等。

本文介绍spaa的安装、主要函数并介绍相应的分析流程。

1. spaa的安装

spaa程序包由R语言写成,源代码完全公开,用户可以在任何一个CRAN镜像下载。

安装方法为:在R界面输入命令install.packages("spaa"),R软件会自动提示选择一个镜像,自动下载该程序包并安装好。

最新的版本代码保存在github上,https://github.com/helixcn/spaa,安装的命令为:

1
2
library(devtools)
install_github("helixcn/spaa")

2. spaa的函数和数据集

2.1 函数

  • data2mat: 将野外记录转换为样地物种矩阵
  • freq.calc: 计算相对多度
  • niche.overlap: 计算物种间的生态位重叠
  • niche.overlap.boot: 对生态位重叠求bootstrap置信区间
  • niche.overlap.boot.pair: 对每两个种之间求生态位重叠的Boostrap置信区间
  • niche.overlap.pair: 计算每两个种之间的生态位重叠
  • niche.width: 计算生态位宽度
  • plotlowertri: 绘制半矩阵图
  • plotnetwork: 绘制网络相关性图
  • sp.assoc: 计算群落总体的关联性
  • sp.pair: 计算物种两两之间的关联性
  • sub.sp.matrix: 基于相对频度,给出样方内部分物种的数据

2.2 内置的数据集

  • splist: 示例数据的科属种信息
  • datasample: 示例数据
  • testdata: 示例数据

3. 计算生态位宽度举例

3.1 群落数据转换为矩阵

计算多样性指数、种间联结、生态位宽度、重叠或进行排序分析时,群落数据一般都需要转换为表1的格式,即每一行表示一个样方,每一列表示一个物种,数字表示物种在样方中出现的个体数。

表1 群落物种矩阵

sp1 sp2 sp3 sp4 sp5 sp6 sp7
plot1 3 6 1 2 1 0 0
plot2 8 0 30 0 0 0 0
plot3 0 1 0 2 0 1 3

实际情况下,野外数据一般用两种方式记录:1. 每木调查表格 和 2. 普通群落调查表格

3.1.2 每木调查表格

每木调查表格,常作为森林监测样地,也就是大样地的数据格式。这种格式中,每个分枝单独为一行,每棵树单独编号,各列名称一般为:

  1. 样方号
  2. 编号
  3. 物种名
  4. x坐标
  5. y坐标
  6. 分枝号(0为主干,1为第一分枝,2为第二分枝以此类推)
  7. 胸径
  8. 高度
  9. 生存状态(生、立枯、倒木等)
  10. 附注

表1. 森林监测样地每木记录

plot tag species x y branch dbh height status remark
0101 btm0101001 sp1 1.5 5.8 0 15 12 alive tree
0101 btm0101002 sp2 3.3 12.1 0 12 10 alive tree

… …

假设数据为data.frame, 名称为btmdata, 各列名称如上表所示,则生成群落物种矩阵可以用如下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
plot <- c("0101", "0101", "0102")
tag <- c("btm0101001", "btm0101002", "btm0101003" )
species <- c("sp1", "sp2", "sp1")
x <- c(1.5, 3.3, 4.1)
y <- c(5.8, 12.1, 8.9)
branch <- c(0, 0, 0)
dbh <- c(15, 12, 5)
height <- c(12, 10, 8)
status <- c("alive", "alive", "alive")
remark <- c("", "", "")

btmdata <- data.frame(plot, tag, species, x, y, branch, dbh, height, status, remark)
# 以上为生成样地数据
# 以下为生成群落-物种丰富度矩阵
btm <- table(btmdata$plot, btmdata$species)
btm
##
## sp1 sp2
## 0101 1 1
## 0102 1 0

3.1.2 群落调查表格

普通群落调查表要简单很多,一般第一列为样方名,第二列为物种名,第三列为该种在样方中的个体数,其数值一般为整数,若第三列为重要值等,也可能为小数。

表2 样方调查表格

plot species abundance
plot1 sp1 3
plot1 sp2 6
plot1 sp3 1
plot1 sp4 2
plot1 sp5 1
plot2 sp1 8
plot2 sp3 30
plot3 sp4 2
plot3 sp2 1
plot3 sp6 1
plot3 sp7 3

这种情况下,要将其转换为群落-物种矩阵,则可以用下面的命令:

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
library(reshape2)library(spaa)
data(datasample)
# melt需要将行名作为data.frame中的一列
datasample2 <- cbind(plot = row.names(datasample), datasample)

# 将修改后的matrix转换为数据记录的常用格式
aaa <- melt(data = datasample2,
id.vars = "plot",
measure.vars = 2:ncol(datasample2),
variable.name = "species",
value.name = "abundance",
factorsAsStrings = TRUE)

# 因有些样方中物种没有出现,所以是0.00
aaa1 <- aaa[aaa$abundance > 0, ]
head(aaa1)
## plot species abundance
## 1 1 Castanopsis.eyrei 25.58
## 2 2 Castanopsis.eyrei 28.41
## 3 3 Castanopsis.eyrei 39.43
## 4 4 Castanopsis.eyrei 11.53
## 5 5 Castanopsis.eyrei 35.01
## 6 6 Castanopsis.eyrei 51.34
bbb <- acast(aaa1,
formula = plot ~ species,
value.var = "abundance",
fill = 0)
bbb
## Castanopsis.eyrei Schima.superba Rhododendron.ovatum Cyclobalanopsis.glauca
## 1 25.58 5.95 3.32 12.10
## 2 28.41 1.03 13.24 1.85
## 3 39.43 14.37 5.06 0.00
## 4 11.53 6.45 3.01 9.04
## 5 35.01 6.47 0.00 17.57
## 6 51.34 8.65 9.96 0.00
## 7 26.83 12.11 9.96 3.07
## 8 19.80 7.61 2.64 0.00
## Daphniphyllum.oldhamii Loropetalum.chinensis Pinus.massoniana
## 1 7.53 12.10 0.00
## 2 4.71 0.00 0.00
## 3 13.71 4.07 5.14
## 4 0.00 4.12 0.00
## 5 0.00 4.30 2.17
## 6 0.95 0.00 1.08
## 7 9.61 2.89 4.41
## 8 3.85 3.86 9.77
## Rhododendron.latoucheae Vaccinium.bracteatum Lithocarpus.glaber
## 1 1.07 6.99 1.21
## 2 5.13 6.81 7.18
## 3 1.16 0.00 0.00
## 4 4.49 0.00 3.71
## 5 0.00 0.00 3.12
## 6 2.08 2.21 0.00
## 7 0.00 0.00 0.00
## 8 5.99 1.95 0.00
## Syzygium.buxifolium Castanopsis.tibetana Castanopsis.fargesii
## 1 0.00 0.00 1.01
## 2 0.00 0.96 0.00
## 3 0.00 0.00 0.00
## 4 1.22 2.15 1.40
## 5 0.00 0.00 0.00
## 6 0.92 0.00 0.00
## 7 2.47 0.00 0.00
## 8 0.00 0.00 0.00
## Photinia.serrulata
## 1 0.00
## 2 1.21
## 3 0.00
## 4 0.00
## 5 0.00
## 6 0.00
## 7 0.00
## 8 0.88

如果abundance一列不含小数, 则可以用spaa程序包提供的data2mat()函数转换。需要注意,各列的名称要分别命名为"plotname","species","abundance",经过这样标准化处理后,即可通过data2mat()转换为矩阵。

调用方式为data2mat(testdata)

3.2 计算种间联结

种间联结,包括群落总体联结和种与种之间的关联(周先叶等, 2000; 史作民等, 2001; 张思玉和郑世群, 2002; 张志勇等, 2003; 康冰等, 2005; 王文进等, 2007; 王乃江等, 2010)。

3.2.1 群落总体的物种联结

sp.assoc函数计算,一般用以下指数:

1. 物种相对多度的方差:

img(公式 1)

2. 物种数的方差

img(公式 2)

3. 相对多度频率

img(公式 3)

4. 方差比率

img(公式 4)

如果VR > 1 正相关;如果VR < 1 负相关

W统计量用来检验方差比率的显著程度 95%置信区间为 Chi0.95,N2 < W < Chi0.05, N2

img(公式 5)

在公式1-5中,N为样方数,S为总物种数,n为一个物种所占据的样方数,T_j为每个样方的物种数,t为所有样方的物种数平均值。

3.2.2 种间联结的显著性检验

一般采用2X2列联表检验。假设有物种A和物种B在各样方中的个体数, a, b, c, d分别表示两者之间共同出现和不出现的情况:

  • a:物种A和物种B共同占据的样方数;
  • b:只出现物种A的样方数;
  • c:只出现物种B的样方数;
  • d:物种A和物种B都不出现的样方数;
  • n:所有样方数n = a+b+c+d(张金屯, 2004)

判断两个种之间是否存在显著的关联时,常常应用经过Yates校正过的卡方。

1. 经过Yates矫正的卡方检验显著性(公式 6)

img(公式 6)

此外,V比值以及Jaccard指数、Ochiai指数、Dice指数、点相关指数PCC、Pearson相关系数、Spearman相关系数体现也用来体现两个种之间相关性的紧密程度(郭志华等, 1997; 邢福和郭继勋, 2001; 张光明等, 2003; 张志勇等, 2003; 张金屯, 2004; 朱圣潮, 2006),其公式分别为:

2. V比值(公式 7)

img(公式 7)

3. Jaccard指数(公式 8)

img(公式 8)

4. Ochiai指数(公式 9):

img(公式 9)

5. Dice 指数(公式 10)

img(公式 10)

6. PCC:点相关系数(公式 11)

img(公式 11)

7. 连接系数AC

  • 若ad >= bc:

img(公式 12)

  • 若bc > ad, 且 d >= a,则:

img(公式 13)

  • 若bc > ad且 d < a,则:

img(公式 14)

8. Spearman秩相关系数(公式 15)

img(公式 15)

9. Pearson相关系数(公式 16)

img(公式 16)

上述指数通过调用spaa的sp.pair()函数即可得到,结果以list的形式给出。

3.3 计算生态位宽度

生态位宽度,常用Levins或Shannon指数来度量(吴大荣, 2001; 向悟生等, 2002; 张桂莲和张金屯, 2002; 胡正华和于明坚, 2005; 何小娟等, 2008; 钱逸凡等, 2012),公式如下:

1. Levins生态位宽度

img(公式 17)

2. Shannon生态位宽度

img(公式 18)

其中B_i为第i种的生态位宽度,j表示样方,r表示样方的数量。

spaa程序包的niche.width()函数可用来计算每个种的生态位宽度。调用方法为niche.width(mat, method = c("shannon", "levins")),其中 mat为样方-物种矩阵,method选择其一即可。

3.4 计算生态位重叠的函数

spaa提供了niche.overlap()函数计算所有种种对之间的生态位重叠系数,包括:levins", "schoener", "petraitis", "pianka", "morisita等,返回结果则为距离矩阵。各指数定义如下:

1. Levins生态位重叠指数

img(公式 19)

2. Schoener生态位重叠指数

img(公式 20)

3. Petraitis特定重叠指数

img(公式 21)

4. Pianka重叠指数

img(公式 22)

5. Czechanowski index

img(公式 23)

6. 简化的Morisita指数

img(公式 24)

其中O_ik为种i和种k的生态位重叠系数,P_ijP_kj分别为种i和种k在第j个样方的多度,r为样方的总数,e为自然对数的底。

调用方法举例:

1
2
3
data(datasample)
niche.overlap(mat, method = c("levins", "schoener", "petraitis",
"pianka", "czech", "morisita"))

其中,mat为群落物种分布矩阵, method选择"levins", "schoener", "petraitis", "pianka", "czech", "morisita"其中任意一种。

若只想得到两个物种之间的生态位重叠系数,则需要运行niche.overlap.pair()函数。调用方式为:

1
2
niche.overlap.pair(vectA, vectB, method = c("pianka",  "schoener", 
"petraitis", "czech", "morisita", "levins"))

其中VectAvectB分别为两个向量,表示在对应的群落中物种A和物种B的个体数, method则需要选取"pianka","schoener","petraitis","czech","morisita","levins"中的任意一个。

3.5 生态位宽度置信区间的自展分析

为了估计两个种之间的生态位重叠的置信区间,spaa提供了生态位重叠的自展分析bootstrap函数niche.overlap.boot()。该函数各参数如下:

1
2
3
niche.overlap.boot.pair(vectorA, vectorB, method = c("levins",     
"schoener", "petraitis", "pianka", "czech", "morisita"),
times = 1000, quant = c(0.025, 0.975))

其中mat为输入的物种分布矩阵。method是要选择的方法,times为bootstrap进行的次数,quant为生态位重叠指数的分位数,默认为0.025和0.975,即95%置信区间。

在计算过程中,niche.overlap.boot()会调用niche.overlap.boot.pair(),先计算物种两两之间的生态位重叠置信区间。一般情况下,用户均无需调用niche.overlap.boot.pair()

img

图1 物种生态位重叠的bootstrap结果

各列的含义分别如下:

  • 第1列,两个列的种名Castanopsis.eyrei-Schima.superba,表示对应的种对
  • 第2列,Observed 实际的物种生态位重叠指数
  • 第3列,Boot mean 表示bootstrap结果的算数平均值
  • 第4列,Boot std表示生态位重叠指数的standard deviation
  • 第5列,Boot CI1 表示物种生态位重叠指数的下分位数,默认为 0.025
  • 第6列,Boot CI2 表示物种生态位重叠指数的上分位数,默认为 0.975

当某个样方中,缺少一个物种时,在bootstrap的过程中,会出现NaN,这表明,在根据公式计算生态位重叠的过程中,出现了除数为0的情况。在随机有放回抽样中,这种物种出现组合是可能发生的,此时的bootstrap结果以及CI的结构都会变得不准确,建议此时要审慎考虑,且不要使用spaa给出的结果。

3.6 绘图

3.6.1 物种关联半矩阵图

spaa程序包还提供了一些函数,如plotlowertri用来绘制物种关联半矩阵图等。

img

图2 plotlowertri()函数绘制的半矩阵图

其函数调用方式为

1
2
3
plotlowertri(input, valuename = "r",  pchlist = c(19, 17, 15, 1, 5, 2, 7), 
interval = 6, cex = 1, ncex = 1, int =1.2, add.number = TRUE, size = FALSE,
add.text = FALSE, show.legend = TRUE, digits = 2)

用户可以对要显示的相关系数矩阵或者距离矩阵等,进行灵活调整(图1)。

3.6.2 物种关联网络图

显示物种之间的相互关联,还可以用网络图来表示,即用不同颜色,不同粗细以及点的形状,来连接各物种,表示种相互之间的关联,或者地点之间物种的相似性。spaa的plotnetwork()函数即可以用来绘制网络图(图3)。但是网络图不宜用来表示物种较多的情况,如超过了10个,则所绘制的线过多,难以清晰得表达物种之间或者地点之间的联系。

img

图3 plotnetwork()函数物种关联网络图

3.7 其他函数

3.7.1 物种筛选的函数

除此之外,spaa还提供了用于物种筛选的函数,sub.sp.matrix(spmatrix, freq = 0.5, common = NULL),可以选出频度大约某一数值的所有物种,Common参数则是选出最常见的多少个物种的数据,常见物种经过筛选之后,可以方便进行生态位宽度,生态位重叠等计算。

3.7.2 地理距离计算和转换等

spaa程序包另提供计算地理距离的函数lgeodist(),geodist(),给定两点的经纬度,可以计算两地点间的球面距离;deg2dec(),deg2dec()可以用来进行度分秒的转换;以及beta多样性计算过程中的转换函数dist2list(), turnover(), lab.mat()等,在beta多样性的计算,以及大样地数据的处理中可以提供帮助。

致谢

感谢丁琼、黄继红、李宗善博士在程序包开发中给予的帮助,感谢马进泽、张雪妮、姜俊、高梅香、方晓峰、泳游、Wei Li、Alfredo H. Zúñiga á.、ísisArantes、Patricia Martínez、Wilson Martins da Silva、Jessica L. Sabo、Maud CHARLERY、杜忠毓、Diego Procopio、詹小豪、Luis Fernando Gatica Mora、赵文溪、肖正利、金超、邢冰伟、潘达、Vicente García-Navas、 江焕 、王路路、Clara Ruiz González、郭嘉兴、杜元宝、钟云婕、王晨赫、徐衡 、张玮、郝珉辉、Suhridam Roy、王媛、韩大勇、杨帆、姚雪芹、王晶、杨海涛、郑桂玲、岳鹏鹏、Mary Ann McLean、鲍志贵、Russell Bicknell, Joan Giménez Verdugo、Angela Andrea Camargo Sanabria、赵小丹、Ramiro Logares Haurié、Simone Cappellari Rabeling、Caitlin Keating-Bitonti、Ching-Maria VILLANUEV、Ingrid Rosario Sánchez- Galván、Aristide Andrianarimisa等提出宝贵意见。Kurt Hornik博士以及Brian Ripley教授,对程序包的编译提出过一些意见和建议,一并致谢。

参考文献

  • Ackerly, D.D. 2003.Community assembly, niche conservatism, and adaptive evolution in changing environments. International Journal of Plant Sciences, 164:S165-S184.
  • Chase, J.M. .2003.Community assembly: when should history matter? Oecologia, 136:489-498.
  • Cornwell, W.K. and D.D. Ackerly.2009.Community assembly and shifts in plant trait distributions across an environmental gradient in coastal California. Ecological Monographs, 79:109-126.
  • Pavoine, S. and M.Bonsall.2011.Measuring biodiversity to explain community assembly: a unified approach. Biological Reviews, 86:792-812.
  • 方精云, 沈泽昊, 唐志尧, 王志恒.2004.中国山地植物物种多样性调查及若干技术规范. 生物多样性, 12(1):5-9.
  • 郭志华, 卓正大, 陈洁, 吴梅凤.1997.庐山常绿阔叶、落叶阔叶混交林乔木种群种间联结性研究. 植物生态学报, 21(5):424-432.
  • 韩文衡, 李先琨, 叶铎, 吕仕洪, 向悟生, 宋同清, 曹洪麟. 2009.桂西北喀斯特区常绿落叶阔叶混交林种群种间联结性与相关性. 山地学报, 27(6):719-726.
  • 何小娟, 洪滔, 何东进, 刘勇生, 卞莉莉, 陈笑玲, 苏炳霖. 2008.武夷山风景名胜区天然林主要种群生态位特征研究. 中国生态农业学报, 16(2):285-291.
  • 胡正华,于明坚. 2005.古田山青冈林优势种群生态位特征. 生态学杂志, 24(10):1159-1162.
  • 康冰, 刘世荣, 蔡道雄, 温远光, 史作民, 郭文福, 朱宏光, 张广军,刘磊. 2005.南亚热带人工杉木林灌木层物种组成及主要木本种间联结性. 生态学报, 25(9):2173-2179
  • 李军玲,张金屯. 2010.太行山中段植物群落草本植物优势种种间联结性分析. 草业科学, 27(9):119-123.
  • 马克平, 刘灿然,刘玉明. 1995.生物群落多样性的测度方法. Ⅱ. ß 多样性的测度方法, 3(1):38-43.
  • 牛克昌, 刘怿宁, 沈泽昊, 何芳良,方精云. 2009.群落构建的中性理论和生态位理论. 生物多样性, 17(6):579-593.
  • 钱逸凡, 伊力塔, 胡军飞, 张超, 余树全, 沈露,彭东琴. 2012.普陀山主要植物种生态位特征. 生态学杂志, 31(3):561-568.
  • 史作民, 刘世荣, 程瑞梅,蒋有绪. 2001.宝天曼落叶阔叶林种间联结性研究. 林业科学, 37(2):29-35.
  • 孙中伟,赵士洞. 1996.长白山北坡椴树阔叶红松林群落木本植物种间联结性与相关性研究. 应用生态学报, 7(1):1-5.
  • 王乃江, 张文辉, 陆元昌, 范少辉,王勇. 2010.陕西子午岭森林植物群落种间联结性. 生态学报, 30(1):67-78.
  • 王文进, 张明, 刘福德, 郑建伟, 王中生, 张世挺, 杨文杰,安树青. 2007.海南岛吊罗山热带山地雨林两个演替阶段的种间联结性. 生物多样性, 15(3): 257-263.
  • 吴大荣. 2001.福建罗卜岩闽楠(Phoebe bournei) 林中优势树种生态位研究. 生态学报, 21(5):851-855
  • 向悟生, 李先琨, 苏宗明, 欧祖兰, 宁世江, 唐润琴, 李瑞棠. 2002.元宝山冷杉群落主要树木种群生态位的初步研究. 武汉植物学研究, 20(2):105-112.
  • 邢福, 郭继勋. 2001.糙隐子草草原 3 个放牧演替阶段的种间联结对比分析. 植物生态学报, 25(6):693-698
  • 杨利民, 周广胜, 王国宏. 2001.草地群落物种多样性维持机制的研究Ⅱ物种实现生态位. 植物生态学报, 25(5):634-638.
  • 张光明, 杨大荣, 徐磊, 彭艳琼, 卢耀. 2003.西双版纳聚果榕榕果小蜂种间联结性研究. 生态学杂志, 22(4):20-26.
  • 张桂莲, 张金屯. 2002.关帝山神尾沟优势种生态位分析. 武汉植物学研究, 20(3): 203-208.
  • 张金屯. 2004.数量生态学.北京:科学出版社.
  • 张倩媚, 陈北光, 周国逸. 2006.鼎湖山主要林型优势树种种间联结性的计算方法研究. 华南农业大学学报, 27(1):79-83.
  • 张思玉, 郑世群. 2002.福建永定桫椤群落内主要灌木种群的种间联结性研究. 云南植物研究, 24(1):17-22.
  • 张志勇, 陶德定, 李德铢. 2003.五针白皮松在群落演替过程中的种间联结性分析. 生物多样性, 11(2):125-131.
  • 周先叶, 王伯荪, 李鸣光, 昝启杰. 2000.广东黑石顶自然保护区森林次生演替过程中群落的种间联结性分析. 植物生态学报, 24(3):332-339.
  • 朱圣潮. 2006.中华水韭松阳居群的群落结构与种间联结性研究. 生物多样性, 14(3):258-264.

用plantlist程序包查询和处理植物学名 (plantlist 0.6.5)

plantlist包简介

plantlist是用来查询和处理植物学名的R程序包,自2013年发布以来,受到很多老师和同学的关注。

plantlist的主要功能

  1. 批量查询植物科属,内置的数据主要来源于The Plant List网站 ( www.theplantlist.org/ ),其中被子植物采用APGIII分类系统,同时提供维管植物每个科的编号,可用于植物标本管理,方便编纂植物名录等。
  2. 直接生成科/属/种的列表, 以便导入Phylomatic, V.PhyloMaker等软件生成进化树
  3. 用中文名批量查询植物学名以及科属
  4. 查询学名的接受状态以及完整学名等
  5. 制作不同风格的中文植物名录Markdown源文件

类似的程序包或网站

R软件中,类似的程序包还有:

网站有:

相比之下,plantlist的主要特点在于:

  1. 使用校对过的内置数据,使用过程中不需要连网。
  2. 优化了查询单个物种名是否为接受名的算法,速度更快
  3. 查询结果所显示的信息更加简洁清晰
  4. 支持用中文名批量查询学名

plantlist包内的函数

  • TPL() 用学名查询目、科、属以及科在分类系统中的编号
  • taxa.table() 基于TPL查询结果制作科、属、种列表,以便用Phylomatic软件建立进化树
  • status() 查询每个学名在The Plant List 1.1数据库中的接受状态(该数据库已经放在程序包中)
  • CTPL() 查询中国记录植物的科、属、分布、海拔、IUCN等级等
  • count_taxa 统计CTPL查询结果出现的科、属、种等数量
  • make_checklist 根据CTPL的查询结果,制作三种风格的植物名录(按照系统发育顺序排列)

内置数据

  • acc_dat: The Plant List 1.1 网站上的所有接受名
  • cnplants_dat: 《中国植物名录》及每个种的科、属、分布、海拔、中国IUCN等级以及特有性等数据
  • genera_dat: The Plant List 1.1 网站上的所有属名列表,因源数据有一些错误,绝大部分已经修订。
  • orders_dat: Angiosperm Phylogeny Website (www.mobot.org/MOBOT/research/APweb/) 提供的各科所属的目。
  • syn_dat: The Plant List 1.1 网站的异名数据库

安装

由于plantlist最新版本的源代码保存在github (https://www.github.com/helixcn/plantlist)。

安装命令如下:

1
2
install.packages("remotes")
remotes::install_github("helixcn/plantlist", build_vignettes = TRUE)

用法

TPL():根据拉丁名,查询目、科、属及科的编号

TPL函数输入的数据必须是字符串向量。可以查询科、属、种的相应信息,但并不会提示学名是否为接受名。要查询学名是否为接受名,请用status()函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
library(plantlist)
## This is plantlist 0.6.5.
TPL("Carex") # 薹草属
## YOUR_SEARCH POSSIBLE_GENUS FAMILY FAMILY_NUMBER ORDER GROUP
## 1 Carex Carex Cyperaceae APGIII_099 Poales Angiosperms
TPL("Apple") # 苹果
## YOUR_SEARCH POSSIBLE_GENUS FAMILY FAMILY_NUMBER ORDER GROUP
## 1 Apple Apple <NA> <NA> <NA> <NA>
splist <- c("Ranunculus japonicus",
"Solanum nigrum",
"Punica sp.",
"Machilus",
"Today",
"####" )
### 查询多个种
res <- TPL(splist)

taxa.table() :基于TPL查询结果制作科、属、种列表

查询结果多用于Phylomatic或V.PhyloMaker等软件构建进化树。示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
library(plantlist)
sp <- c( "Ranunculus japonicus",
"Anemone udensis",
"Ranunculus repens",
"Ranunculus chinensis",
"Solanum nigrum",
"Punica sp." )
res <- TPL(sp)
taxa.table(res)
## [1] "Ranunculaceae/Ranunculus/Ranunculus_japonicus"
## [2] "Ranunculaceae/Ranunculus/Ranunculus_repens"
## [3] "Ranunculaceae/Ranunculus/Ranunculus_chinensis"
## [4] "Ranunculaceae/Anemone/Anemone_udensis"
## [5] "Solanaceae/Solanum/Solanum_nigrum"
## [6] "Lythraceae/Punica/Punica_sp."

status() :查询每个学名在The Plant List 1.1 (本程序包内置数据) 的接受状态

函数参数:

1
status(species =NA, exact =TRUE, spell_error_max =NULL)

status函数可以查询变种var.、亚种 subsp.以及变型f.是否接受等信息

  • species为输入的字符串向量
  • exact表示是否进行精确匹配,如果选择FALSE,则所有能用grep正则表达式匹配的结果都会显示。一般用精确匹配即可
  • spell_error_max 为所允许的最大的错误拼写的字母数量

status函数对输入的物种名大小写不敏感,物种名的前后以及中间允许有多个空格,species可以包括或者不包括命名人(变型f.之前的命名人除外)

示例:

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
library(plantlist)
#### 查询一个名称
status("Myrica rubra")
## [1] "1 name(s) to process."
## SCIENTIFIC_NAME AUTHOR STATUS FAMILY ACCEPTED_SPECIES
## 1 Myrica rubra (Lour.) Siebold & Zucc. Accepted Myricaceae Myrica rubra
## ACCEPTED_AUTHOR
## 1 (Lour.) Siebold & Zucc.
#### 查询多个名称

status(c("Myrica rubra",
"Adinandra millettii",
"Machilus thunbergii",
"Ranunculus japonicus",
"Cyclobalanopsis neglecta"))
## [1] "5 name(s) to process."
## SCIENTIFIC_NAME AUTHOR STATUS FAMILY
## 1 Myrica rubra (Lour.) Siebold & Zucc. Accepted Myricaceae
## 2 Adinandra millettii <NA> <NA> <NA>
## 3 Machilus thunbergii Siebold & Zucc. Accepted Lauraceae
## 4 Ranunculus japonicus Thunb. Accepted Ranunculaceae
## 5 Cyclobalanopsis neglecta Schottky Synonym Fagaceae
## ACCEPTED_SPECIES ACCEPTED_AUTHOR
## 1 Myrica rubra (Lour.) Siebold & Zucc.
## 2 <NA> <NA>
## 3 Machilus thunbergii Siebold & Zucc.
## 4 Ranunculus japonicus Thunb.
## 5 Quercus myrsinifolia Blume

重要提示: 由于表示变型的 f. 有时也用于命名人中,因此,用status函数在查询变型时, 请勿为种添加命名人,但是变型的命名人可以提供或者不提供,具体为:

1
2
3
"Hypoxis hirsuta (L.)Coville f. vollosissima Fernald"#  (不能处理)
"Hypoxis hirsuta f. vollosissima Fernald"#(能处理)
"Hypoxis hirsuta f. vollosissima"#(能处理)

CTPL() :用中文名查询科、属、分布、海拔、IUCN等级数据

调用方式: CTPL(taxa = NULL, print_as_list = TRUE)

其中,taxa是植物的中文名向量, print_as_list 只是打印方式的选项,如果为TRUE, 则用列表的方式打印。

注意

  • 由于涉及中文输入和输出,需要在Rstudio中操作
  • 本函数返回值为data.frame, print_as_list参数并不改变返回值的数据类型

count_taxa() :统计CTPL结果的科、属、种数量

调用方式: count_taxa(checklist_dat)

checklist_datCTPL()函数返回的结果,CTPL结果中没有信息的行,将会被忽略。

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
library(plantlist)
res_CTPL <- CTPL(c("桃儿七",
"连香树",
"水青树",
"绿樟",
"网脉实蕨",
"Magnolia coco",
"Punica"),
print_as_list = FALSE)
count_taxa(res_CTPL)
## Warning in count_taxa(res_CTPL): Taxa '绿樟, Punica' does not have full scientific name, ignored
## $NO_OF_FAMILIES
## [1] 5
##
## $NO_OF_GENERA
## [1] 5
##
## $NO_OF_SPECIES
## [1] 5
##
## $NO_OF_FAMILIES_BY_GROUP
## group no_of_families
## 1 2 Ferns and lycophytes 1
## 2 4 Angiosperms 4
##
## $NO_OF_GENERA_BY_GROUP
## group no_of_genera
## 1 2 Ferns and lycophytes 1
## 2 4 Angiosperms 4
##
## $NO_OF_SPECIES_BY_GROUP
## group no_of_species
## 1 2 Ferns and lycophytes 1
## 2 4 Angiosperms 4
##
## $NO_OF_GENERA_BY_FAMILY
## family no_of_genera
## 1 Berberidaceae 1
## 2 Cercidiphyllaceae 1
## 3 Dryopteridaceae 1
## 4 Magnoliaceae 1
## 5 Trochodendraceae 1
##
## $NO_OF_SPECIES_BY_FAMILY
## family no_of_species
## 1 Berberidaceae 1
## 2 Cercidiphyllaceae 1
## 3 Dryopteridaceae 1
## 4 Magnoliaceae 1
## 5 Trochodendraceae 1
##
## $NO_OF_SPECIES_BY_GENUS
## genus no_of_species
## 1 Bolbitis 1
## 2 Cercidiphyllum 1
## 3 Magnolia 1
## 4 Sinopodophyllum 1
## 5 Tetracentron 1

make_checklist() :制作markdown格式的植物名录 (按照系统发育顺序排列)

调用:

1
2
3
make_checklist(checklist_dat = NULL, 
outfile = "output_make_checklist.md",
theme = c("complex", "simple", "minimal"))

参数:

  • checklist_dat = NULL: 为CTPL函数返回的结果

  • outfile: 为输出的markdown文件的名称

  • theme: 有三种风格可选,其中

    • complex: 输出的资料最详实,包括IUCN等级、海拔、省级分布等
    • simple : 包括物种名和引证的标本
    • minimal: 只显示物种的中文名和完整学名

关于分类单元的排列顺序:在大类群上按照苔藓、蕨类、裸子植物、被子植物的顺序;每个类群下,按照科的顺序号;科以下,属按照字母排列;属下各种按照分类单元的拉丁名排列。如有提供标本引证,则在CTPL返回的数据框上添加名为SPECIMENS的列即可。

1
2
3
4
5
6
7
8
9
10
11
12
library(plantlist)
res_CTPL <- CTPL(c("桃儿七",
"连香树",
"水青树",
"绿樟",
"网脉实蕨",
"Magnolia coco",
"Punica"), print_as_list = FALSE)
make_checklist(res_CTPL)
## Warning in make_checklist(res_CTPL): Taxa 绿樟, Punica does not have full scientific name, ignored
## File output_make_checklist.md has been saved to:
## C:/Users/jlzhang/Desktop

引用

如果您使用了plantlist程序包,请通过以下方式引用(请根据版本和日期做相应修改):

致谢

编写本程序包最早是2014年1月在中国科学院昆明植物研究所的《生态和进化中的现代统计:基于R语言的应用》( http://blog.sciencenet.cn/blog-255662-793234.html )课程时开始的。特别感谢杨雪飞老师的邀请以及多位老师同学共同讨论。

本程序包苔藓植物各科属的中文名由中国科学院植物研究所刘冰博士提供。 Plantlist 1.1 数据库来源于汪远分享的数据。

感谢高芳銮、李嵘、张健、朱慧玲、刘冰、胡晓丽、冯嘉恩、黄世芳、俞筱押、胡海花、李家湘、刘水银、鲍志贵、张美霞、葛斌杰、孔德良、刘振稳、龙文兴、金建军、夏尚文、李霞、陶旺兰、李秋萍、易逸瑜、张璋、骆争荣、彭舜磊、郭文永、贾蕙君等各位老师同学提出宝贵意见和建议。

参考文献

  • 数据来源 https://github.com/helixcn/plantlist_data
  • 多识团队. (2016至今). 多识植物百科. http://duocet.ibiodiversity.net/.
  • 刘冰, 叶建飞, 刘夙, 汪远, 杨永, 赖阳均, 曾刚,林秦文. (2015). 中国被子植物科属概览: 依据 APG III 系统. 生物多样性, 23(2), 225-231.
  • 环境保护部, 中国科学院. (2013) 《中国生物多样性红色名录——高等植物卷 》 电子版来源: www.mep.gov.cn/gkml/hbb/bgg/201309/W020130917614244055331.pdf
  • Christenhusz, M., Zhang, X. C., and Schneider, H. (2011a). 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. (2011b). A new classification and linear sequence of extant gymnosperms. Phytotaxa. 19:55-70