plantlist程序包已经恢复从Rforge下载或安装

完整文档请参考 http://blog.sciencenet.cn/blog-255662-846673.html

R程序包plantlist可以批量查询高等植物的APG科属、科编号以及学名在ThePlantList网站数据库中的接受状态及对应接受名等。速度快过taxize等同类程序包10倍左右,函数参数便于理解,简单易用。除了从github/helixcn安装外,现在已恢复从Rforge安装。plantlist是本人在2014年1月在中科院昆明植物研究所主讲R语言课程时编写的,主要用来辅助进行系统发育多样性研究以及方便标本馆管理。

随着R软件的不断升级, plantlist程序包旧版本中的一些编码问题逐渐暴露。 特别是内置接受名和异名数据库中,命名人中出现的非ASCII字符在转换过程中会出错, 这个错误甚至导致Rforge上 (https://r-forge.r-project.org/R/?group_id=2052)plantlist程序包不能成功编译为windows版本。

正巧北京大学池秀莲老师咨询如何安装plantlist的问题,于是决定解决这一问题。

非ASCII字符不能成功转换, 目前似乎只有两种方法:

  1. 去掉非ASCII字符,或者用近似的字母代替原来的字母。 

StackOverFlow上Wickham提出的一个解决方案, 举例如下: 

1
2
3
4
5
6
x <- c("Ekstru00f8m", "Ju00f6reskog", "biu00dfchen Zu00fcrcher")
x
#> [1] "Ekstrøm"         "Jöreskog"        "bißchen Zürcher"

stringi::stri_trans_general(x, "latin-ascii")
#> [1] "Ekstrom"          "Joreskog"         "bisschen Zurcher"
  1. 用UTF编码的转义字符。
    未能查到从GB2312或者GB18030转换为UTF8字符的算法。 但是有一种方式可以实现的。 那就是使用 openxlsx程序包先将字符以xlsx格式保存在Excel文件中, 保存后用read.xlsx读取, 生成了UTF8转义字符串。 经过转换后的字符串可以在R程序包中正常处理了。

img

怀念老姑

老姑,在北方话里就是最小的姑姑,离开这个世界已经6年了。老姑属羊,如果健在,应该只有五十岁。

我小时候印象最深的,就是她乡下的中登高中读书,每个星期拿着一个铝饭盒,装着咸菜,就骑着笨重的自行车去上学了。在这之前,她一直在读书,从未做过什么农活。然而八十年代末,第一次高考,老姑没有考上理想的学校,选择在县城的宝坻一中补习一年。一个读了十几年书的大姑娘,一下子到了命运的转折点,也许这就是命运。那时候,如果能考上大专、大本,就意味着以后有工作,能分房、分粮食,不但成为天之骄子,更能成为城里人,从此不再过苦日子。

然而再次高考成绩还是不理想。爷爷因此大发雷霆,据说老姑吓得有段时间不敢回家,躲在亲戚家。

这毕竟不是长久之计,高中毕业后,姑娘已经老大不小,最好就是找人嫁了。托媒的不少。那时候子女的婚事基本上由父母做主,姑娘必须要同意是否嫁给一个人,哪怕只见过一面,有时甚至只见过相片。我不知道老姑的内心经历过怎样的挣扎,最后嫁给一里路以外的官庄村老郝家的“六顺”。从此正式由女学生成为农村妇女,要种地,劳作,一切重新开始。

1992年,表弟出生了,生活更加不容易。她什么都做,农忙时种西红柿,种朝天椒,种红高粱、棒子,农活之外,还要做饭,还有家里的洗洗涮涮,缝缝补补。

在老家,男人们过得很潇洒,下地干活回来,男人可以回到家一躺,等着饭熟了。女人却必须承担起几乎家务劳动的全部。生活的压力压在老姑肩上,她的腰变粗了,手也变得粗糙。我上初中时,父亲不在家,家里很困难,那时候二姑、二姑父,老姑、老姑父经常叫我中午放学后到家里吃饭,给我炒菜或者包饺子,都是把最好的给我。那时候还觉得老姑做饭没有我妈做得好吃…这一切已经过去二十多年了。

为了养家,农闲时,老姑还跟村里人一起,坐三马车去几十里外的黄庄洼割稻子。宝坻的水稻一年一熟,收的时候好像都快入冬了。深秋,刮西北风之前常常大雾弥漫。有一次,拉着割水稻临时工的三马车跟大货车相撞,当场就有四个人死了,受伤七八个。幸好小姑姑在后面一辆车,但是面睹惨剧,吓得不敢再去了。

生活虽然艰苦,但是子女是最大的欣慰,然而表弟很淘气,心思都在玩儿,学习成绩每次在班上排到后几名,这真让人很无奈。更无奈的是老姑父“六顺”,脾气非常暴躁,嗜赌如命,传闻还会到县城的发廊找乐子。遇到夫妻间的争吵,有几次拿铁棍把老姑打得遍体鳞伤。老姑向我妈哭诉,我亲眼看过她大腿上被打得青一块、紫一块,还有血迹斑斑的衣服。可能那时候,这么严重的家庭暴力每年都有一两次。有一次六顺回到家,一看家里的饭不好,一个人去外面吃肉饼了….这样的事情经年累月,对人内心是多大的折磨。

就这样经过了很多年,又一件不好的事情发生了。2004年6月,我在哈尔滨读本科三年级,我妈打电话说老姑精神失常了。我一下子不知道说什么好,内心的难受和同情难以言说。暑假回到老家,去大口屯精神病院看姑姑,她神情木讷,说话毫无逻辑。

精神病至今没有很好的治疗手段,只能服用镇静剂等或用物理刺激,如电击击晕,以防病人生事。精神病起因多样,尤其是长期或者瞬间的精神压力突然难以承受,有可能会成为诱因。老姑患病的直接原因说是帮别人代领了打工的工钱,然后老板少给了五毛,把钱捎给工友后,工友去找老板问为什么少给五毛。老板说没有少给。于是工友就去质问老姑。老姑急于证明自己的清白,因此情绪失控,精神失常了。

对精神分裂症患者最好的照顾,除了送院治疗之外,更重要的是家人的关爱。但是指望嗜赌如命,性情暴躁,动不动就使用家庭暴力的老姑父照顾一个病人根本不可能。老姑患病后,他脾气更加暴躁,更加夜不归宿,白天晚上都在赌钱。回到家更加变本加厉:老姑非但没有得到照顾和关爱,反而被打得更加严重。

我父母心疼和担心她,就把老姑接到家里来,然后告到法院离婚。法院准许离婚,这样最少能不让老姑再受家庭暴力。老姑在我家,经过慢慢调养,逐渐恢复了。

又有人来给说媒,老姑和我父母都同意嫁给一个老光棍,比她大十几岁,但是人很老实,和他八十多岁的老娘一起生活。我们都希望老姑能好好生活,新老姑父能多关心她。然而事与愿违,老姑最后在新家喝了一瓶乐果,选择结束自己的生命。

老姑在医院里抢救,我父母心急如焚。抢救了几天,老姑清醒的时候说了一句话,“是xxx把我害了….”。老姑走了。我听到消息大哭一场。那时候我马上要提交博士论文,没有时间回老家。而且父母也对新老姑父有很多的意见和矛盾,没有参加她的葬礼。老姑出殡时,我家一个人都没有出现,所以到现在我也不知道老姑埋在了哪里。

经常想起老姑,想起她扎着围巾的样子;想起她读高中时买的一块红色、一块绿色的香橡皮,那时候我总想多闻一闻;想起她送给我的铅笔盒、圆规;想起她给我做的中午饭,给我包的饺子;想起她给我家拿来满满一篮子西红柿……这一切已渐行渐远,走到记忆深处。

人生不能重来,请珍惜当下,珍惜身边每一个亲人和朋友。

金龙

2017年4月2日

香港大埔

简短笔记一则:查找并删除重复文件

2017年第一则

1, Linux Ubuntu, Mint下, 删除重复文件推荐使用fdupes

安装:

sudo apt-get install fdupes

删除某一个文件夹下的重复文件:

dupes -d -R /some/directory

  1. Windows删除重复文件

推荐 CloneSPY

http://www.clonespy.com/?Home

DoubleKiller

  1. 快速查找文件

Windows下用 everything https://www.voidtools.com/

Linux下用Catfish

  1. 比较两个文本文件的差异

Linux 用

diff -y test.txt test2.txt>res_compare.txt

Meld

Windows下用

Meld

  1. 下载文件

Linux 用 wget

  1. 下载网站以本地浏览

httrack

https://www.httrack.com/

  1. 同步和备份文件夹

http://www.freefilesync.org/

  1. 下载某一网页下的pdf文件

Firefox的addon

flashgot

基于地理坐标提取地图中的属性信息

问题:现有全国范围内的样地分布地点,已知它们的WGS84经纬度,如何用R从植被分区图中提取每个点的植被分区信息?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#### 植被图下载 https://xg1990.com/blog/archives/97
#### R代码: 

setwd("/working directory/")
library(openxlsx)
library(maptools)
library(sp)
point_dat <- read.xlsx("sites.xlsx")
coordinates(point_dat) <- cbind(point_dat$longitude , point_dat$latitude)

##### 植被分区图下载地址
#####  http://xg1990.com/blog/wp-content/uploads/2012/09/%E4%B8%AD%E5%9B%BD%E6%A4%8D%E8%A2%AB%E5%8C%BA%E5%88%92.poly_.WGS84.zip

county <- readShapePoly("china_vegetation_polygon.WGS84")
plot(county)
extracted = over(point_dat, county)
res <- data.frame(point_dat, extracted)
write.xlsx(res, "extracted_by_points.xlsx

数据和代码的下载地址: extract value from polygon.zip

通过数码照片以及GPS航迹绘制物种分布图

在植物学或者生态学调查中, 获得物种的准确位置以及绘制珍稀种或目标种在所调查区域的分布图往往十分重要。 这里以Windows 10为例, 介绍如何基于GPS航迹文件 为数码照片添加地理坐标信息, 并提取每张照片的坐标, 从而绘制物种分布图。

需要的软件:

过程:

1 为照片添加地理坐标

1.1 所有照片用XnView MP 软件查看, 按F2, 按照物种进行重命名,如“IMG2063九节.jpg”.

1.2 用exiftools 为每张照片写入地理坐标, 注意相机与GPS的时间差需要校正

举例

exiftool -geotag track2016-11-23.gps -geosync=+25 “C:photos20161123 Survery Photos”

更多例子参考 http://www.sno.phy.queensu.ca/~phil/exiftool/geotag.html

exiftools在使用前先要配置好,以便通过cmd可以直接调用。 方法为:

(1) 更改exiftool(-k).exe 为 exiftool.exe

(2) 创建文件夹 C:Program Filesexiftools 并将 exiftool.exe 拷贝到该文件夹下

(3) 右键选择我的电脑, Advanced System Settings >Advanced>Environment Variables>System Variables>双击Path>New> 然后将 C:Program Filesexiftools 拷贝到路径即可。

2 导出每张照片的经纬度, 并生成CSV文件

2.1 用geosetter打开照片,全选照片后导出为kmz文件

2.2 用7zip解压缩kmz文件, 其中的kml文件用 KMLCSV Converter 导出

2.3 Excel > Data > External Data Source> 导入CSV文件, 记得编码选择UTF-8,以显示中文字符。

2.4 将珍稀濒危植物的坐标拷贝到新的csv文件中

3. 将坐标点导入到ARCGIS中

在Arcmap中点击加号+, Add Data > 选择保存好的CSV文件>在左侧的导航栏选择Display Data, 注意XY以及坐标系的选择

4. 在ARCMAP中添加调查的GPS路径

4.1 航迹GPX文件需要先转换为kml文件,才能显示为航迹。

首先将GPS的航迹GPX文件, 导入GPSBabel中, 其中: (1)Format选择 “GPS XML”; (2) Output选择 “google Earth (Keyhole) Markup Language”. 给出要生成的KML文件名,例如 TPK.kml

4.2 将kml文件加载到ARCMAP中

在arcgis中, 打开toolbox, 选择Conversion Tools> From KML>KML to Layer> 在新打开的窗口中, 选择要转换的KML文件, 在Environments中, 要选择 Output Coordinates> 选择 Geographic Transformations 选择 Hong Kong 1980_to_WGS1984_1, 这是因为香港的底图用的是HK1980, 新添加到图层默认是按照底图添加,如果不进行投影变换, 则位置可能有几十米的偏差。选择好后, 按 确定 OK 即可完成转换。 arcgis会将图层自动添加到导航栏以及地图上。

4.3 调整设色信息以及图例, 即完成地图的绘制。

注:用Exiftool通过模板可以直接生成具有经纬度的CSV文件,不一定非要使用geosetter, 7zip, 以及KML2CSV,也可以获得要导入ARCGIS的文件, 可参考 http://blog.sciencenet.cn/blog-255662-864234.html

2016-11-25

用herblabel程序包打印不同风格的植物标本标签

关于herblabel程序包的介绍, 请参考 http://www.biodiversity-science.net/CN/abstract/abstract10290.shtml

herblabel程序包输出不同的标签样式, 目前支持四种 KUN, PE, KFBG以及HU, 效果如下

herblabel程序包的安装

install.packages(“herblabel”, repos=”http://R-Forge.R-project.org")

run_herblabel文件夹的下载地址

run_herblabel.zip

KUN 基于中国科学院昆明植物研究所标本馆标签样式

img

PE, 基于中国科学院植物研究所标本馆标签样式

img

KFBG, 嘉道理农场暨植物园标本馆目前所采用的植物标本标签

img

HU, 哈佛大学标本馆当前所用的标签样式

Rmarkdown与R的动态统计报告 (2019-02-19)

R的Sweave函数是用来生成动态统计报告的函数:如果将R代码包括在统计结果的Latex源代码中,用Sweave处理后, 就可以生成包含相应代码以及统计结果的统计报告, 十分方便。不过Latex的各种标记比较零碎,除非经常使用,否则各种标记很容易忘记。此外用Sweave通过Latex源代码编译非英文的文档极容易出错, 又很难解决, 同时Sweave函数对R的代码高亮支持也不是特别好。为此, 以谢益辉(http://yihui.name/)为首的一群玩标记语言(Markdown, html, Latex)的大咖搞出了一系列工具以及Markdown 标记语言的变体Rmarkdown。Rmarkdown生成动态动态报告可以很方便得转换成pdf、html以及docx格式。对于R代码高亮的支持也是非常值得称赞的。

Markdown是一种极为轻量级的标记语言,创始人为 John Gruber(https://en.wikipedia.org/wiki/John_Gruber)。html、latex、RTF等都是标记语言:在纯文本的基础上添加一定格式的标记, 以实现特殊的功能。Markdown的目标是通过极为简单的符号以及规则, 对文档进行排版, 同时让源代码便于书写和更改。markdown在github网站有很广泛的应用, 用来撰写每个软件的说明, 以自动生成网页。markdown的扩展名为.md。顾名思义,Rmarkdown是专门为R设计的markdown语言,只能用在Rstudio以及一些R程序包中。

本文简要记述介绍在Windows下, 通过Rstudio基于Rmarkdown文档,生成中文的动态报告。而在其他平台上编译中文的Rmarkdown文档要简单得多。

需要的软件:

  1. Rstudio (https://www.rstudio.com/)
  2. MikTex套装 (https://miktex.org/), 请注意要下载Win32版本
  3. R (https://cran.r-project.org/bin/windows/base/)

需要安装的R程序包:

markdown ( install.packages("markdown") )

knitr ( install.packages("knitr") )

rticles程序包, 以编译为 提供更多PDF样式模板 (至2018年5月提供: acm_article,acs_article,aea_article,ams_article,asa_article,ctex,elsevier_article,jss_article,plos_article,pnas_article,rjournal_article,rss_article,sim_article等)

Rmarkdown的基本结构

Rmarkdown需要以用YAML表头开始。YAML是一种计算机标记语言, 用来提供文档的基本信息。YAML需要缩进来体现各部分内容之间的逻辑关系。一般来说, Rmarkdown的YAML信息包括最基本的三项, 其中冒号前为关键字, 冒号后为参数, 以指明该文档的作者, 时间, 许可证, 通过什么软件编译,输出方式等。

例如:

1
2
3
title: "Untitled"
author: "Anonymous"
output: html_document

正文内容与markdown的语法无异, markdown的正文中可以插入不同等级的标题,图片,表格,超链接,Latex的数学公式等等。Rstudio给出了参考卡片 (https://www.rstudio.com/wp-content/uploads/2015/03/rmarkdown-chinese.pdf)

如果要编译中文文档,特别是生成pdf文档, 则需要更改YAML说明的output部分。设定
- \usepackage{ctex} 以及 pdf_document: latex_engine: xelatex

以下文档, 已经在Windows10 下已经编译成功:

1
2
3
4
5
6
7
8
9
10
11
12
##### R Markdown文档开始 ###########

---
title: "用R绘制 Color Checker"
author: "张金龙"
date: 2016-09-21
header-includes:
- \usepackage{ctex}
output:
pdf_document:
latex_engine: xelatex
---

比色卡主要用于摄影时校正白平衡等, 在摄影,美术, 科学研究中有很广泛的应用。下面介绍用R如何绘制比色卡。

首先Color Checker 所需的RGB颜色,来源于 http://en.wikipedia.org/wiki/ColorChecker

ColorChecker Colorimetric Data, archived from the original on 2012-04-17, retrieved 2012-04-17

以下是R代码:

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
## 比色卡RGB颜色

sRGB <- c( "#735244", "#c29682", "#627a9d", "#576c43", "#8580b1", "#67bdaa",
"#d67e2c", "#505ba6", "#c15a63", "#5e3c6c", "#9dbc40", "#e0a32e",
"#383d96", "#469449", "#af363c", "#e7c71f", "#bb5695", "#0885a1",
"#f3f3f2", "#c8c8c8", "#a0a0a0", "#7a7a79", "#555555", "#343434")

x =1:24
y =1:24
dim(x) <- c(4, 6)
dim(y) <- c(4, 6)

x1 = 2
y1 = -2

for(i in 1:6){
for(j in 1:4){
x[j, i]<- x1 + i*(13.5+2)
y[j, i]<- y1 - j*(13.5+2)
}
}

x2 <- x -13.5
y2 <- y -13.5

par(bg ='black', mar =c(0,0,.8,0))

#### 绘制背景
plot(1, xlim =c(5, 94), ylim =c(-77, -18), pch ="")

#### 绘制每种颜色的小方块

k =1
for(i in 1:4){
for(j in 1:6){
rect(x[i,j],y[i,j],x2[i,j],y2[i,j], col= sRGB[k])
k = k +1
}
}
mtext("Colour Checker in RGB",side =3, line=.01, col="white", cex =0.6)

##### R Markdown文档结束 ###########

将以上内容保存为.Rmd文件,并用Rstudio打开, 点击标题栏的Knit 即可编译为PDF。

生态学和进化的重要链接EcoEvoLinks

网址 https://github.com/helixcn/EcoEvoLinks