R语言实践——使用 rWCVP 生成自定义清单

news2024/11/17 3:27:35

使用 rWCVP 生成自定义清单

  • 介绍
  • 1. 特有物种清单
  • 2. 近特有物种清单
    • 2.1 在塞拉利昂和另一地区出现的物种
    • 2.2 在塞拉利昂和相邻地区出现的物种
  • 3. 生成自定义报告

介绍

除了允许用户从世界维管植物名录(WCVP)创建清单外,rWCVP还提供了修改清单输出以生成自定义报告的功能。本文通过生成塞拉利昂特有(或近特有)物种列表来证明这一点。

除了 rWCVP 之外,我们还将使用 tidyverse 包进行数据操作和绘图,使用 gt 包来渲染漂亮的表格,并使用 sdpep 包来查找边界区域。

先做好准备工作

library(rWCVP)
library(tidyverse)
library(gt)
library(spdep)

在此示例中,使用==管道运算符 (%>%) 和 dplyr语法 ==- 如果不熟悉这些,我建议查看 https://dplyr.tidyverse.org/ 和其中的一些帮助页面。

1. 特有物种清单

我们首先生成塞拉利昂物种清单。记住和/或找到合适的 WGSRPD 3 级代码是一种痛苦,因此我们可以在函数调用中使用 get_wgsrpd3_codes(“Sierra Leone”)为我们完成这项工作。

sl_code = get_wgsrpd3_codes("Sierra Leone")
sl_species = wcvp_checklist(area=sl_code, synonyms = FALSE)

synonyms = FALSE表示只保留接受名。结果有近10万条。
在这里插入图片描述

塞拉利昂有多少物种,有多少是特有的?我们可以在这里选取特有列,非常简单。

(endemic_summary = sl_species %>%
    distinct(taxon_name, endemic) %>%
    group_by(endemic) %>%
    summarise(number.of.sp=n()))
# A tibble: 2 × 2
  endemic number.of.sp
  <lgl>          <int>
1 FALSE           3303
2 TRUE              45

容易!对于特有物种列表,我们可以简单地使用特有列过滤我们的清单,但是近特有物种呢?

2. 近特有物种清单

根据我们对近特有物种的定义,有两种办法进行筛选:

  1. 我们将近特有物种定义为出现在塞拉利昂和另一个WGSPRD3地区(L3)的物种。从数据的角度来看,这意味着过滤掉sl_species中有 >2 行的物种(因为每一行都是物种区域出现)。
  2. 或者,我们可以考虑近特有物种,因为那些可能跨越边界的物种,因此在功能上是地方性的。为此,我们需要a)确定相邻的WGSPRD3区域,b)相应地过滤我们的物种列表。

2.1 在塞拉利昂和另一地区出现的物种

我们只需直接从塞拉利昂物种列表中移除分布地超过2处的物种即可。

sl_near_endemics1 = sl_species %>%
  group_by(plant_name_id, taxon_name) %>%
  filter(n() < 3) %>%
  ungroup()

在这里插入图片描述
结果有179条,但里面有重复(即由于近特有物种定义引起的),总结后:

sl_near1_summary = sl_near_endemics1 %>%
  group_by(taxon_name) %>%
  summarise(number.of.sp=n())

近特有物种有112种,还可以根据数字判断哪些是新增的,哪些是原有的特有物种。
在这里插入图片描述

2.2 在塞拉利昂和相邻地区出现的物种

首先,我们需要确定哪些WGSRPD地区与塞拉利昂接壤。
我们可以通过查看地图来做到这一点,但我们将使用编程方式操作图层文件。为此,我们采用 WGSRPD 级别 3 多边形并找到彼此接壤的所有区域。

sf_use_s2(FALSE)

area_polygans = rWCVPdata::wgsrpd3
area_neighbours = poly2nb(area_polygans)

请注意,我们必须为此使用 sf_use_s2(FALSE) 关闭 sf 中的球面坐标。

现在我们有一份邻近地区的清单,我们需要找到与塞拉利昂接壤的地区。

sl_index = which(area_polygans$LEVEL3_COD %in% sl_code)
sl_neighbours_index = area_neighbours[[sl_index]]
sl_plus_neighbours = area_polygans[c(sl_index, sl_neighbours_index),]

在这里插入图片描述
在生成最终清单之前,检查此自动邻居检测的健全性。然后可以将区域映射到地图中

bounding_box = st_bbox(sl_plus_neighbours)
xmin = bounding_box["xmin"] - 2
xmax = bounding_box["xmax"] + 2
ymin = bounding_box["ymin"] - 2
ymax = bounding_box["ymax"] + 2

ggplot(area_polygans) +
  geom_sf(fill="white", colour="grey") +
  geom_sf(data=sl_plus_neighbours, fill="#a4dba2", colour="gray20") +
  coord_sf(xlim = c(xmin, xmax), ylim=c(ymin, ymax)) +
  geom_sf_label(data=sl_plus_neighbours, aes(label=sl_plus_neighbours$LEVEL3_NAM)) +
  theme(panel.background = element_rect(fill = "#bfbadb")) +
  xlab(NULL) +
  ylab(NULL)

在这里插入图片描述
当然,我们可以从地图上将几内亚和利比里亚确定为邻国,然后使用get_wgsrpd3_codes(“利比里亚”)和get_wgsrpd3_codes(“几内亚”)找到代码,但这并不那么有趣!

接下来,我们可以将近特有物种确定为仅在塞拉利昂,几内亚或利比里亚出现的物种。

sl_near_endemics2 = sl_species %>%
  group_by(plant_name_id) %>%
  filter(all(area_code_l3 %in% sl_plus_neighbours$LEVEL3_COD)) %>%
  ungroup()

在这里插入图片描述
最后,我们将列表过滤到仅发生在塞拉利昂+一个邻国的物种,就像我们在选项1中所做的那样。从地图上看,一个物种似乎可能发生在三个国家之间的三重交界处,但对于这个例子,我们将排除这些物种。

sl_near_endemics2 = sl_near_endemics2 %>%
  group_by(plant_name_id, taxon_name) %>%
  filter(n() < 3) %>%
  ungroup()

在这里插入图片描述

同样,除掉重复看实际上有多少个近特有物种:

sl_near2_summary = sl_near_endemics2 %>%
  group_by(taxon_name) %>%
  summarise(number.of.sp=n())

在这里插入图片描述

3. 生成自定义报告

现在我们可以做一些花哨的事情 - 将我们的清单数据框转换为格式化报告。为此,我们将其插入名为“custom_checklist.Rmd”的模板文件中,该文件存储在 rWCVP 包文件夹(”rmd“子文件夹)中。我们使用参数传递数据(以及其他一些信息),并且需要使用output_file指定文件名。

library(rmarkdown)

checklist_description = "Checklist of species that are endemic to Sierra Leone (or near-endemic, based on neighbouring countries)"
wd = getwd()
render(system.file("rmd", "custom_checklist.Rmd", package = "rWCVP"),
       quiet = TRUE,
       params=list( version = "New Phytologist Special Issue",
                    mydata = sl_near_endemics2,
                    description = checklist_description),
       output_file = paste0(wd,"/Sierra_Leone_endemics_and_near_endemics.html"))

这个步骤报错,我没有能力解决

看看应该出现的结果吧:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在小公司“混”了2年,我只认真做了5件事,如今顺利拿到字节 Offer

前言 是的&#xff0c;我一家小公司工作了整整两年时间&#xff0c;在入职这家公司前&#xff0c;也就是两年前&#xff0c;我就开始规划了我自己的人生&#xff0c;所以在两年时间里&#xff0c;我并未懈怠。 现如今&#xff0c;我已经跳槽到了字节&#xff0c;入职字节测试…

傅里叶级数 傅里叶变换 及应用

傅里叶级数和傅立叶变换是傅里叶分析的两个主要工具&#xff0c;它们之间有密切的关系。 什么是傅里叶级数 傅里叶级数是将一个周期函数分解为一系列正弦和余弦函数的和。它适用于周期性信号&#xff0c;可以将周期函数表示为一组振幅和相位不同的谐波分量的和。傅里叶级数展…

Netty编解码机制(二)

1.Netty入站和出站机制 1.1.基本介绍 1>.netty的组件设计: Netty的主要组件有Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipe等; 2>.ChannelHandler充当了处理入站和出站数据的应用程序逻辑的容器.例如,实现ChannelInboundHandler接口(或ChannelInb…

Unity之如何接入google cardboard-xr-plugin实现android手机VR

前言 我们提到VR,总是会想到Oculus,HTC Vive,Pico等头戴VR设备,但是别忘了,最早Google就通过再手机端实现VR了,而且还推出过Cardboard手机盒子,让我们可以用最低的成本体验到VR效果。 插件下载 先说明一下,Unity在1028版本之前,支持过GoogleVR,但是后来因为统一…

Chapter8 :Physical Constraints(ug903)

8.1About Physical Constraints&#xff08;关于物理约束&#xff09; XilinxVivado集成设计环境&#xff08;IDE&#xff09;允许通过设置对象属性值对设计对象进行物理约束。示例包括&#xff1a; •I/O约束&#xff0c;如位置和I/O标准 •布局约束&…

惨败字节,苦心备战两个月斩获阿里offer,这份“258页软件测试面试宝典”也太顶了

测试三年有余&#xff0c;很多新学到的技术不能再项目中得到实践&#xff0c;同时薪资的涨幅很低&#xff0c;于是萌生了跳槽大厂的想法。 但大厂不是那么容易进的&#xff0c;前面惨败字节&#xff0c;为此我辛苦准备了两个月&#xff0c;又从小公司开始面试了半个月有余&…

k8s pv pvc的介绍|动态存储|静态存储

k8s pv pvc的介绍|动态存储|静态存储 1 emptyDir存储卷2 hostPath存储卷3 nfs共享存储卷4 PVC 和 PVNFS使用PV和PVC 4 搭建 StorageClass NFS&#xff0c;实现 NFS 的动态 PV 创建 1 emptyDir存储卷 当Pod被分配给节点时&#xff0c;首先创建emptyDir卷&#xff0c;并且只要该…

FPGA—可乐机拓展训练题(状态机)

题目&#xff1a;以可乐机为背景&#xff0c;一瓶可乐的价格还是 2.5 元。用按键控制投币&#xff08;加入按键消抖功能&#xff09;&#xff0c;可以投 0.5 元硬币和 1 元硬币&#xff0c;投入 0.5 元后亮一个灯&#xff0c;投入 1 元后亮 2 个灯&#xff0c;投入 1.5 元后亮 …

【统计模型】学生课程类型选择影响因素分析

目录 学生课程类型选择影响因素分析 一、研究目的 二、数据来源和相关说明 三、描述性分析 3.1 样本描述 3.2 样本可视化 3.2.1 直方图 3.2.2 列联表 3.2.3 箱线图与折线图 3.2.4 相关性热力图 四、数学建模 4.1 无序多分类logistic回归模型 4.1.1 无序多分类logist…

STM32F030C8T6最小系统板和流水灯(原理图和PCB)

STM32F030C8T6最小系统板和流水灯。 嵌入式课的课程设计&#xff0c;要做个流水灯&#xff0c;我就顺便画个最小系统板&#xff0c;开源出来了&#xff0c;各位大佬指点指点&#xff0c;有哪里需要优化改进的。 那个WS2812的RGB灯用错引脚了&#xff0c;所以没法用PWM来控制&…

MQTT GUI 客户端 可视化管理工具

MQTT GUI 客户端 可视化管理工具 介绍 多标签页管理&#xff0c;同时打开多个连接提供原生性能&#xff0c;并且比使用 Electron 等 Web 技术开发的同等应用程序消耗的资源少得多支持 MQTT v5.0 以及 MQTT v3.1.1 协议&#xff0c;支持通过 WebSocket 连接至 MQTT 服务器以树…

数字信号处理7

昨天着重就是离散时间系统的复习&#xff0c;包括离散时间系统的分类有哪些&#xff0c;是根据什么进行分类的&#xff0c;要搞清楚&#xff0c;LTI系统是一个什么样的系统&#xff0c;以及卷积的操作&#xff0c;因果LTI等&#xff0c;回顾完这些之后&#xff0c;就开始了今天…

Python面向对象编程详细解析(都带举例说明!)

前言 Python面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是一种编程范式&#xff0c;它将数据和操作数据的方法封装在一起&#xff0c;形成一个对象。 Python中的面向对象编程包括以下内容&#xff1a; 目录点击对应章节可直接跳转…

数据治理项目易失败?企业数据治理的解决思路在这里

据Gartner 的一项调查显示&#xff0c;我国超过90%的数据治理项目都失败了。大家的感受也是如此&#xff1a;数据治理的项目不好落地&#xff0c;数据治理项目实施起来从理论到实践有一条巨大的鸿沟很难跨越。 失败的原因各种各样&#xff0c;总结起来大概有4类&#xff1a; …

编译原理个人作业--第六章——基于 编译原理 国防工业出版社 第三版

2 对表达式((a)(b)) (1) 按照表6.4属性文法构造抽象语法树 (2) 按6.17翻译模式构造表达式抽象语法树 5(1) 下列文法对整型常数、实型常熟世家加法运算符 生成表达式&#xff0c;当两个整型数相加&#xff0c;结果为整形&#xff0c;否则结果为实型 E → E T ∣ T E\r…

软件测试面试题

一、描述 TCP/IP 协议的层次结构&#xff0c;以及每一层中重要协议 TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;是互联网的核心协议套件&#xff0c;它定义了在网络中进行通信的规则和标准。TCP/IP协议栈按照层次结构划分&#xff0c;每一…

【DataTable.js】DataTable基础应用

一、简介 DataTables是一个功能强大的Javascript库&#xff0c;用于向HTML表中添加交互特性&#xff0c;虽然简单性是整个项目的核心设计原则&#xff0c;但一开始可能会让人望而生畏。然而&#xff0c;采取这些第一步&#xff0c;让DataTables在你的网站上运行实际上是相当直…

测试——四元数绕轴旋转

float angle 40;Vector3 v rotatePoint.transform.position;Debug.Log("旋转向量 " v "__自身 " cube.transform.rotation);v.Normalize();Debug.Log(v);float f angle * Mathf.Deg2Rad / 2;float sinHalfAngle Mathf.Sin(f);float cosHalfAngle M…

智慧梁场3D建模

智慧梁场3D建模&#xff1a;数字化革命下的新起点 ​ 随着科技的迅猛发展&#xff0c;数字化已经成为了现代工业生产的必然趋势。作为传统工业的核心产业&#xff0c;建筑行业也在不断地探索数字化变革的新路径。而“智慧梁场3D建模”便是其中的一项杰出实践。 ​ 梁场是建筑…

FreeRTOS:系统内核控制函数

目录 前言一、内核控制函数预览二、内核控制函数详解2.1强制上下文切换宏2.2临界区2.3可屏蔽中断2.4调度器2.5调整系统节拍 前言 FreeRTOS 中有一些函数只供系统内核使用&#xff0c;用户应用程序一般不允许使用&#xff0c;这些 API 函 数就是系统内核控制函数。内核控制的一…