报告:《从序列到分化时间——进化树与分子钟》

这是2010年1月,本人在研究组所做的报告之一,内容为依据DNA序列构建进化树的原理与方法,并依据进化树进行分子钟估算。

包括:

  1. 在GenBank上下载DNA序列
  2. 在ClustalX中进行DNA序列比对,及其注意事项
  3. DNA 碱基替换模型及其筛选,ModelTest软件的原理
  4. 进化树的构建的原理
    介绍了距离法,极大似然法,最大简约法和贝叶斯法的原理,及其实现软件PAUP*, PHYLIP, MrBayes
  5. 进化树分枝节点的可信度评估,即Bootstrap方法的原理和实现
  6. 分子钟假设检验及NPRS平滑方法在r8s软件中的实现。

共有幻灯片101张。
现整理出来,供对进化分析有兴趣的老师和同学参考。
如果有任何问题或建议,欢迎随时与本人联系,

下载 报告幻灯片 从DNA序列到分化时间——进化树与分子钟 .pdf (1.0M)

PAUP*软件简明指南

PAUP* 全称Phylogenetic Analysis Using Parsimony (and Other Methods)是美国佛罗里达大学的David Swofford博士编写的,是用最大简约法建立进化树最重要的软件,同时与ModelTest软件一起,是进化模型筛选等的必备软件,也可以进行如极大似然法建树及其他分析。在同类软件中,几乎拥有最快的运行速度,性能卓越。PAIP能在MacOS, Windows,Unix等平台上运行。目前最新版本为4beta10

其网址为 http://paup.csit.fsu.edu

为方便刚刚接触PAUP*及进化分析的同行入门,本人写了一个简要说明。

真正正确的使用该软件,弄清楚算法的原理是必须的,这里推荐Lemey,Salemi and Vandamme主编的 The Phylogenetic Handbook, Cambridge University Press.

PAUP*使用指南.pdf

用RAxML构建极大似然进化树

RAxML是用极大似然法建立进化树的软件之一,可以处理超大规模的序列数据,包括上千至上万个物种,几百至上万个已经比对好的碱基序列。作者是德国慕尼黑大学的A. Stamatak博士。 性能在一定程度上超越了PHYML,GARLI等著名软件,由于算法的优势,具有更高的准确性。RAxML支持分隔模型,每个分隔模型又支持GTRGAMMA等进化模型。因此在多个基因建立进化树的时候,该软件能快速准确的获得极大似然进化树。

RAxML有若干版本(有的版本支持在多个CPU上运行),本文以最常用的单机版raxmlHPC为例。进行检验介绍。

调用RAxML中的功能时,需要设置相应的开关,一般是将命令拷贝到.bat文档中,通过运行bat文件,执行RAxML,以得到相应的结果。

更具体的内容参见使用指南。

参见pdf文档

RAxML使用指南.pdf

R语言入门幻灯片

R语言入门

R语言在自然科学和社会科学的统计和绘图领域正发挥着越来越重要的作用,但由于其需要输入命令,让很多读者望而生畏,其实R语言本身并没有看起来复杂,只要想清楚自己究竟要做什么,你会发现,用R实现十分简洁而清晰。

R的所有分析过程,可以保存在一个称为脚本的文件中,该文件的扩展名为.r。因此,R中的所有分析过程,都是可以重复的,你无须为一个类似的操作不停的点击鼠标,用几行代码,就能实现大部分你想要实现的分析。

以下是本人于2009年12月准备的一个幻灯片,这个报告原来是在中科院华南植物园葛学军老师研究组做过的,共106张。之后又进行了一定的修改。

主要内容包括

​1. R语言的由来
​2. R下载和安装
​3. R程序包的安装和使用
​4. R帮助查询
​5. 函数与对象
​6. 条件筛选
​7. 编写脚本
​8. R绘图基础
​9. 编写函数

用实例介绍了t检验,方差分析,回归,散点图,箱线图的绘制方法。

附全部练习数据,有兴趣的读者可自己动手跟着练习做几遍,相信很快就会对R有一定的了解。

希望对读者有所帮助。

下载 R语言入门幻灯片.pdf

下载 练习数据

进化时间的估算:r8s软件使用指南

本文所附PDF文件中在Windows编译r8s部分已经过时,请参考博文:

《怎样在Windows10系统中编译和运行r8s》

http://blog.sciencenet.cn/blog-255662-1144730.html

r8s是美国加利福尼亚大学戴维斯分校的进化生物学家Mike Sanderson编写的用于估算进化树分化时间的软件,在进化生物学、分子生物地理学等学科有着广泛的应用,已经成为估算分化时间不可或缺的软件之一。该软件中的一些方法如NPRS和PL是软件作者最先提出的,目前在同类的其他软件中还难以实现。R8s的运行平台为MacOS和Linux,在国内应用的还不多,也难以找到中文的练习资料和说明。

本文基于当前版本r8s 1.7.1,参照其说明书,介绍该软件在Windows下的安装和操作,并对其模块的功能和选项进行简要的说明。

r8s使用指南 完整版

天文计算PyEphem指南

PyEphem (http://rhodesmill.org/pyephem/tutorial.html)(github, Pypi)是Python下的一个软件包,计算准确度很高,可用来计算不同坐标系下太阳、月亮、行星、彗星及人造卫星的位置,亮度,出没时刻,中天时刻等,为天文爱好者制作星历表提供了很大方便。初次接触该软件可能觉得无从下手,本文做简要介绍。

1. 下载和安装软件

1.1 安装Anaconda Python

由于pyephem依赖于NumPy, SciPy等,所以这里建议直接安装Anaconda Python。pyephem 最早是在python2下开发的, 但是已经成功移植到python3下面,所以建议下载和安装anaconda3。

下载Anaconda Python https://anaconda.org/。

1.2 安装pyephem

通过开始>CMD,通过pip安装 pyephem

输入如下命令:

1
pip install ephem

1.3 运行Jupyter Notebook

在开始CMD中,输入 jupyter notebook, 在自动打开的浏览器(即 http://localhost:8888/tree)页面的右上角点击 New, 新建一个Jupyter记事本。

点击加号图标, 新建一个代码区域, 将以下各Python代码块拷贝到代码区,点击左侧的运行符号即可。

运行完成后,点击 File>save as>选择.ipynb,保存为Jupyter Notebook。关于运行 Jupyter Notebook, 请参考 知乎上的专栏

2 代码举例

2.1 计算2010年1月16日天王星的位置和亮度

1
2
3
4
5
6
7
8
9
10
11
import ephem 
u = ephem.Uranus()
# 天王星
u.compute('2010/1/16')
print (u.ra, u.dec, u.mag)
# 赤经、赤纬、亮度
print (ephem.constellation(u))
# 所在星座
# print (u.rise_time)
23:37:29.43 -3:14:13.6 5.9
('Psc', 'Pisces')

2.2 计算2010年1月16日木星的位置和亮度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import ephem
j = ephem.Jupiter('2010/1/16')
# 木星
n = ephem.Neptune('2010/1/16')
# 海王星
print ("Jupiter")
print ("RA:", j.ra, ", \nDEC", j.dec, ", \nMAG:", j.mag)
print ("Neptune")print ("RA:", n.ra, ", \nDEC:", n.dec, ", \nMAG:", n.mag)
print ("Separation between Jupiter and Neptune:", ephem.separation(j, n))
# 木星和海王星的角距
Jupiter
RA: 22:07:54.83 ,
DEC -12:30:01.9 ,
MAG: -1.91
Neptune
RA: 21:49:56.21 ,
DEC: -13:33:46.0 ,
MAG: 7.97
Separation between Jupiter and Neptune 4:30:19.5

2.3 计算火星在近日点和远日点速度的差异

1
2
3
4
5
6
7
8
9
10
11
12
import ephem

def hpos(body): return body.hlong, body.hlat

ma0 = ephem.Mars('1976/05/21')
# 火星在远日点ma1 = ephem.Mars('1976/05/22')
print (ephem.separation(hpos(ma0), hpos(ma1)))
mp0 = ephem.Mars('1975/06/13')
# 火星在远日点mp1 = ephem.Mars('1975/06/14')
print (ephem.separation(hpos(mp0), hpos(mp1)))
0:26:11.4
0:38:05.2

2.4 地方时

1
2
3
4
5
import ephem
d = ephem.Date('1984/12/21 15:00')
ephem.localtime(d)
# 地方时print (ephem.localtime(d).ctime())
Fri Dec 21 23:00:00 1984

2.5 时间转换

1
2
3
4
5
6
7
8
##
import ephem
d = ephem.Date('1950/2/28')
print (d + 1)
# 儒略日
print (ephem.Date(d + 1)) # 年月日时分秒
18321.5
1950/3/1 00:00:00

2.6 日期转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import ephem
### 赋值类型
### 注意时间以 1899/12/31 12:00:00 作为起点
d = ephem.Date(34530.34375) #
d = ephem.Date('1994/7/16.84375')
d = ephem.Date('1994/7/16 20:15')
d = ephem.Date((1994, 7, 16.84375))
d = ephem.Date((1994, 7, 16, 20, 15, 0))
print ('as a float: %f\nas a string: "%s"' % (d, d))
print (d.triple())
# 只显示年月日, 但是日为小数格式
print (d.tuple())
# 显示为 tuple
as a float: 34530.343750
as a string: "1994/7/16 20:15:00"
(1994, 7, 16.84375)
(1994, 7, 16, 20, 15, 0.0)

2.7 计算某时刻太阳和月亮的高度和方位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import ephem
gatech = ephem.Observer()print(gatech)
# 查看观测者位置信息# 2010/1/15 16:20:56 日环食
gatech.long, gatech.lat = '126', '40'
# 观测者位置重新赋值gatech.date = '2010/1/15 16:20:56'
# 观测者时间重新赋值
sun, moon = ephem.Sun(), ephem.Moon()
sun.compute(gatech)
moon.compute(gatech)
print (sun.alt, sun.az)
print (moon.alt, moon.az)
print (ephem.separation((sun.az, sun.alt), (moon.az, moon.alt)))
print (sun.size, moon.size, sun.size - moon.size)
-69:36:06.8 24:22:55.8
-69:24:12.6 12:32:15.7
4:08:44.6
1950.9619140625 1743.300048828125 207.661865234375

2.8 计算每隔五分钟太阳的方位角和高度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import ephem
gatech.date = '1984/5/31 00:00'
# 20:00 EDTsun.compute(gatech)
for i in range(8):
old_az, old_alt = sun.az, sun.alt
gatech.date += ephem.minute * 5.
sun.compute(gatech)
sep = ephem.separation((old_az, old_alt), (sun.az, sun.alt))
# 地平坐标角距
print(gatech.date, sun.alt, sep)
print(gatech.next_setting(sun))
print(gatech.next_setting(sun))
print(sun.alt, sun.az)
1984/5/31 00:40:00 49:09:10.0 1:09:32.8
1984/5/31 10:58:06
1984/5/31 10:58:06
-0:15:46.3 300:05:46.5

2.9 通过轨道根数计算小行星和彗星的位置和亮度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
## ephem database format格式 小行星或彗星的轨道根数
yh = ephem.readdb("C/2002 Y1 (Juels-Holvorcem),e,103.7816,"
"166.2194,128.8232,242.5695,0.0002609,0.99705756,0.0000,"
"04/13.2508/2003,2000,g 6.5,4.0")

yh.compute('2003/4/11')
print (yh.name)
print (yh.ra, yh.dec)
print (ephem.constellation(yh), yh.mag)
print (yh)
C/2002 Y1 (Juels-Holvorcem)
0:22:44.58 26:49:48.1
('And', 'Andromeda') 5.96
<ephem.EllipticalBody 'C/2002 Y1 (Juels-Holvorcem)' at 0x1043dc5b0>

2.10 通过人造卫星的轨道根数 计算卫星出没时刻

1
2
3
4
5
6
7
8
9
## 轨道根数为TLE格式
iss = ephem.readtle("ISS (ZARYA)","1 25544U 98067A 03097.78853147 .00021906 00000-0 28403-3 0 8652",
"2 25544 51.6361 13.7980 0004256 35.6671 59.2566 15.58778559250029")
gatech.date = '2003/3/23'iss.compute(gatech)
print (iss.rise_time, iss.transit_time, iss.set_time)
gatech.date = '2003/3/23 8:00'iss.compute(gatech)
print (iss.rise_time, iss.transit_time, iss.set_time)
2003/3/23 10:48:45 2003/3/23 10:53:09 2003/3/23 10:57:34
2003/3/23 10:48:45 2003/3/23 10:53:09 2003/3/23 10:57:34

2.11 计算在不同历元下,恒星的坐标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
polaris = ephem.readdb("Polaris,f|M|F7,2:31:48.704,89:15:50.72,2.02,2000")
polaris.compute()
print (polaris.dec)
# 默认情况下使用的是电脑的时间
print (ephem.degrees(ephem.degrees('90') - polaris.a_dec))
polaris.compute(epoch='2100')
print (polaris.dec)

thuban = ephem.readdb("Thuban,f|V|A0,14:4:23.3,64:22:33,3.65,2000")
thuban.compute()print (thuban.dec)thuban.compute(epoch='-2800')
print (thuban.dec)
polaris.compute(epoch='-2800')
print (polaris.dec)
89:20:08.2
0:44:09.3
89:20:08.2
64:17:38.4
64:17:38.4
89:20:08.2

在Ubuntu Linux编译r8s

  • 2010年1月4日

  • 2016年10月17日修订

r8s是校对分子钟的著名软件,在分子进化领域有着广泛的应用,但是作者提供的可执行文件只有Mac版本,以及该程序的源代码,用户可在linux下对其源代码进行编译。下面介绍如何在Ubuntu Linux系统下编译r8s的源代码。

1 将r8s压缩包下载到本地,如存放在 “下载” 文件夹中

原代码网址为 http://loco.biosci.arizona.edu/r8s

由于上述网址已经不能下载,这里提供源代码下载: r8s.dist.tgz

2 源代码的解压缩
在Linux终端键入 cd 下载/,

uncompress r8s1.71.dist.tar.Z

tar xvf r8s1.71.dist.tar

此时,出现了r8s1.71目录,该目录下有四个子目录,分别为 bin, doc, sample, src,其中src为需要编译的源代码。

3 源代码的编译 键入如下命令
cd r8s1.71/src/

make

即可完成r8s的编译。

编译过程需要用到gcc编译器,一般情况下,系统均已经安装了gcc编译器,若没有安装,则可键入
sudo apt-get install build-essential

如果出现errno.h相关的错误, 则可以将以下代码按照如下提示更改

修改前: memory.o: /usr/include/errno.h /usr/include/sys/errno.h

修改后: memory.o: /usr/include/errno.h

参考 http://phylobotanist.blogspot.hk/2015/02/dated-phylogenies-my-experience-using.html

统计结果的保存:Sweave in R

Sweave是R中的一个函数,用来生成统计报告的。如果你希望将R的代码和LaTeX的代码整合到一个文件中,可以用Sweave函数生成.tex文件,利用安装好的LaTeX编译TeX文件就能生成包含相应计算结果的pdf文件。
Sweave处理的是.Snw文件,其格式几乎与.TeX文
件相同,不同的是,其中的R代码包含在<<>>= 和 @ 之间,其中<<>>内部可以放置Sweave处理时的参数。
下面是一个简单的.Rnw文件的内容:

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
documentclass[a4paper]{article}
title{How to use Sweave? }
author{Jinlong Zhang}
begin{document}
maketitle
In this example we use hclust() in R to perform a cluster analysis into a LaTeX{} document:
<<>>=
x<-c(1,2,6,8,11)
dim(x)<-c(5,1)
d<-dist(x)
d
hc<-hclust(d, "single")
dend<-as.dendrogram(hc)
@
the dendrograms are also included:
begin{center}
<<fig=TRUE,echo=FALSE>>=
par(mfrow = c(2, 2),mar = c(4,3,1,2))
plot(dend)
plot(dend, nodePar=list(pch = c(1,NA), cex=0.8, lab.cex=0.8), type = "t", center=TRUE)
plot(dend, edgePar=list(col = 1:2, lty = 2:3), dLeaf=1, edge.root = TRUE)
plot(dend, nodePar=list(pch = 2:1, cex=.4*2:1, col=2:3), horiz=TRUE)
@
end{center}
end{document}

将以上代码粘贴到记事本中,另存为test.Rnw文件,放置到R的工作目录,运行Sweave(“test.Rnw”)即可生成.TeX文件和相应的图形文件。eps图形文件等将在变异TeX文档时引用图形时用到。

可以看到,其中包含了两块R代码:
第一部分为

1
2
3
4
5
6
7
<<>>=
x<-c(1,2,6,8,11)
dim(x)<-c(5,1)
d<-dist(x)
hc<-hclust(d, "single")
dend<-as.dendrogram(hc)
@

第二部分为

1
2
3
4
5
6
7
<<fig=TRUE,echo=FALSE>>=
par(mfrow = c(2, 2),mar = c(4,3,1,2))
plot(dend)
plot(dend, nodePar=list(pch = c(1,NA), cex=0.8, lab.cex=0.8), type = "t", center=TRUE)
plot(dend, edgePar=list(col = 1:2, lty = 2:3), dLeaf=1, edge.root = TRUE)
plot(dend, nodePar=list(pch = 2:1, cex=.4*2:1, col=2:3), horiz=TRUE)
@

如果想要生成相应的pdf,只需用LaTeX变异相应的TeX文件即可。

注意:编译的时候,LaTeX会可能会提示找不到Sweave.sty文件,该文件可在C:Program FilesRR-2.9.0sharetexmf目录下找到,拷贝到TeX文件所在的目录下即可。

提供几个进一步学习的链接:
Sweave函数的作者Friedrich Leisch的主页:

在windows中创建R程序包简明指南

在windows中创建R程序包简明指南

  • 2009年8月5日 初稿
  • 2016年8月15日修订
  • 2019年5月24日修订

R软件中CRAN镜像已经有8957个程序包在线发表(截至2016年8月15日),几乎涉及统计编程的所有领域。CRAN上每个程序包都包含源代码以及编译好的Windows, MacOS版本,可在多种平台上使用。除了使用CRAN上的R程序包,用户还可以自己编写R程序包。在数据处理中,如果积累了一定量的R函数,最好将为它们准备好帮助文档,并制作成自己的R程序包,便于管理和使用。

那么在Windows环境下如何编写R程序包并提交到CRAN?本文拟简要说明:

在Windows下编写R程序包通常包括以下几步:

  1. 安装工具软件Rtools和MikTeX并配置启动路径。

  2. 利用R中自带的package.skeleton()函数生成R程序包的模板。

  3. 填写程序包的DESCRIPTION,NAMESPACE,Rd等模板文件。

  4. R包的编译和检查

下面我们来创建一个简单的R程序包,其中只包含一个函数F2C。

1. 安装工具软件Rtools和MikTeX并配置启动路径

1.1 Rtools

Rtools(图1)是在windows下制作R包的一系列工具,其中主要包括MinGW编译器,其中的gcc,g++, gfortran等可用来编译带有C,C++和Fortran等语言的R程序包源代码。

下载地址为:https://cran.r-project.org/bin/windows/Rtools/

安装Rtools时,必须允许其修改启动路径(图2),这样之后才能正常使用。安装大约需要3-5min。

img

图1 Rtools下载页面,应该以最新版本的为准

img

图 2 安装Rtools时应该允许其修改system PATH

1.2 MikTeX

MikTex用来生成PDF帮助文档,在R程序包做检查时是必须的(图3)。

下载地址:http://miktex.org/download。MikTex在使用时会自动安装程序包,所以第一次使用时要保证联网。

img

图3 Mitex在安装中

1.3 设置文件启动路径

设置启动路径的目的是在cmd命令行可以直接调用Rcmd, gcc等命令(找到gcc.exe, Rcmd.exe所在的文件夹,并将其添加到启动路径图4)。

img

图4含有Rcmd.exe的文件夹,该文件夹需要添加到PATH中

方法如下:

右键点击:我的电脑 > 属性 > 高级 > 环境变量 > 系统变量 PATH一项,点击“编辑”,在弹出的窗口中,值Variable Value应该含有如下路径(R和gcc, Miktex因安装的版本而异):

通常Rtools, Miktex等在安装时已经自动配置好启动路径,而R的路径(如C:ProgramFilesRR-3.3.1bini386;C:Program FilesRR-3.3.1binx64; )必须手动添加。每个路径与之前一个路径用英文的分号分隔。

2. 利用package.skeleton()函数生成R程序包模板

假如现在现有R函数F2C,用来将华氏温度转换为摄氏温度, 保存在'C:\Jinlong\package\TEMP.R'中。

函数如下所示:

1
2
3
4
F2C <- function(x){
res <- (x - 32) / 1.8
return(res)
}

则可以用package.skeletons()函数生成R程序包的框架。方法为:

登陆R,例如:开始 > 所有程序 > R > R i386 3.3.1

2.1 清除内存中的对象

目的是删除R内存中所有不需要的数据或函数:

1
rm(list=ls())

2.2 设定工作目录

这里设定为C:\Jinlong\package

1
setwd("C:\\Jinlong\\package")

2.3 导入脚本中的所有R函数

用source()函数读取TEMP.R脚本中的所有函数。

1
source("TEMP.R")

2.4 生成R程序包框架

程序包可以命名为TEMP。输入以下命令生成R包的骨架:

1
package.skeleton(name="TEMP",list = ls())

此时,R控制台中显示:

1
2
3
4
5
6
7
8
9
10
11
12
>setwd("C:\\Jinlong\\package")
>source("TEMP.R")
>package.skeleton(name="TEMP", list = ls())
Creating directories ...
Creating DESCRIPTION ...
Creating NAMESPACE ...
Creating Read-and-delete-me ...
Saving functions and data ...
Making help files ...
Done.
Furthersteps are described in './TEMP/Read-and-delete-me'.
>

可以看到C:\Jinlong\package文件夹下出现了一个TEMP文件夹,该文件夹结构如下:

1
2
3
4
5
6
7
8
9
10
11
└─TEMP
│ DESCRIPTION
│ NAMESPACE
│ Read-and-delete-me

├─man
│ F2C.Rd
│ TEMP-package.Rd

└─R
​ F2C.R

以上就是R包的框架,包括DESCRIPTION,NAMESPACE,Read-and-delete-me三个纯文本文件,以及R文件夹,man文件夹。

3. 填写程序包的DESCRIPTION,NAMESPACE,Rd等模板文件。

3.1. Read-and-delete-me 文件

该文件主要介绍如何创建R包

文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
* Editthe help file skeletons in 'man', possibly combining help files for multiplefunctions.:
编辑man文件夹中的帮助文件模板

* Editthe exports in 'NAMESPACE', and add necessary imports.:
编辑NAMESPACE文件,显示需要导出或者导入的函数。

* Put anyC/C++/Fortran code in 'src'. :
将C/C++/Fortran 的源代码应该放入src文件夹下

* If youhave compiled code, add a useDynLib() directive to 'NAMESPACE'.:
如果含有已经编译好的代码(Windows下是DLL文件),在NAMESPACE中需要加入 useDynLib() 标记。

* Run RCMD build to build the package tarball.
创建R程序包使用命令 R CMD build 程序包名称

* Run RCMD check to check the package tarball.
检查R程序包使用命令 R CMD check 程序包名称

Read "Writing R Extensions" for more information.

请阅读编写R扩展的相应信息。

不过,这里的R CMD说的是在Linux的终端输入的命令,实际上在Windows环境中应该输入 Rcmd (见第四节 R包的编译和检查)

3.2 编辑DESCRIPTION文件和帮助文件

DESCRIPTION文件是该程序包的简介,内容如下:

1
2
3
4
5
6
7
8
9
Package:TEMP
Type:Package
Title:What the package does (short line)
Version:1.0
Date:2016-08-15
Author:Who wrote it
Maintainer:Who to complain to <yourfault@somewhere.net>
Description:More about what it does (maybe more than one line)
License:What license is it under?

冒号右边的内容需要修改。其中不能有非ASCII码的字符。

  • 如果程序包中使用了其它程序包的函数或者数据,则应该在Description文件中加入Suggests或者Depends, imports某程序包的选项,详情参见 Writing R Extensions中的 1.1.3 Package Dependencies 一节。
  • 编写DESCRIPTION文件的相信指南,请参考 Writing R Extensions 的 1.1.1 The DESCRIPTION file 一节。

更改后的DESCRIPTION文件:

1
2
3
4
5
6
7
8
9
Package: TEMP 程序包名称
Type: Package 类型为程序包
Title: Convert Temperature 程序包安装后显示的标题
Version: 1.0 程序包的版本
Date: 2016-08-15 日期,以年月日的格式提供
Author: Jinlong Zhang 作者
Maintainer:Jinlong Zhang <jinlongzhang01@gmail.com> 作者的联系方式
Description:Containing functions for converting temperatures. 程序包的详细功能
License: GPL-2 程序包遵循的版权协议。

3.3 编辑man文件夹中的.rd文件

man文件夹中包含两个文件 F2C.Rd和TEMP-package.Rd,分别是F2C()函数和TEMP包的帮助文件。

Rd文件的格式与Tex的格式很像。在花括号中输入要更改的内容即可。Rd文件的项目中不能留空,否则在检查时会显示警告。其中title是必须填写的内容。同时要注意:在Rd文件中,不要出现非ASCII码字符,否则在Rcmd check中将不能通过。

F2C.Rd文件:单个%为注释,编译时将直接忽略。两个百分号%%为需要修改的内容,

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
\name{F2C}
\alias{F2C}
\title{Fahrenheit to Celsius}

\description{
Convert Fahrenheit to Celsius Degrees
}

\usage{F2C(x)}

\arguments{
item{x}{Fahrenheit in decimal.}
}

\details{
Convert Fahrenheit to Celsius Degreesusing the formula C =(F - 32)/ 1.8
}

\value{Celsius degrees}

\references{\url{http://www.21ic.com/calculator/sheshiwendu.htm}}

\author{Jinlong Zhang}

\note{This is just an example}

\examples{F2C(100)}

\keyword{ Temperature }
\keyword{ Fahrenheit }
\keyword{ Celsius }

TEMP-package.Rd中帮助文件的填法与F2C.Rd的类似。

4 R包的编译和检查

4.1直接在cmd输入命令编译和检查程序包

R 程序包的编译和检查,一般都通过在cmd输入命令。

在开始,运行 cmd的窗口,输入 cd C:\Jinlong\package\TEMP 转入当前的工作目录(图5)。

  • 键入Rcmd check TEMP 对TEMP_1.0.tar.gz代码的各项内容进行检查。

  • 键入Rcmd INSTALL --build TEMP 建立Window压缩包

  • 键入Rcmd build TEMP建立源代码压缩包

  • 键入Rcmd INSTALL TEMP安装到当前的R中

img

图 5 通过cmd编译TEMP文件夹

4.2 通过.bat文件编译和检查程序包

cmd中输入的命令可以保存在Windows的批处理文件中。下面准备编译或安装R程序包的Windows批处理命令:

  • (1)点击鼠标右键新建一个纯文本文件,将以下内容拷贝到该文件夹中,重命名为check package.bat
1
2
Rcmd check TEMP
PAUSE

双击该bat文件,可以对TEMP程序包中的错误进行检查。

  • (2)点击鼠标右键新建一个纯文本文件,将以下内容拷贝到该文件夹中,并重命名为build Windows Binary.bat
    1
    2
    Rcmd INSTALL --build TEMP
    PAUSE
    双击该文件,可以建立Windows系统下的R程序包。
  • (3)点击鼠标右键新建一个纯文本文件,将以下内容拷贝到该文件夹中,重命名为build Linux Source Code.bat,
1
2
Rcmd build TEMP
pause

双击该文件,可以建立Linux系统下的安装包。

  • (4)点击鼠标右键新建一个纯文本文件,将以下内容拷贝到该文件夹中,命名为install package.bat
1
2
Rcmd INSTALL TEMP
PAUSE

双击该文件,可以安装skycalc到当前的R中。

将以上四个.bat文件,放置到TEMP文件夹所在的文件夹, 双击文件,即可完成程序包的安装,编译和检查等。

命令运行完之后可以发现,在C:\Jinlong\package\文件夹下分别生成了TEMP_1.0.zip和TEMP_1.0.tar.gz压缩包(图6)。

img

图6. 编译程序包

如果作者希望将自己制作的Package上传到CRAN,则必须要检查gz的Linux压缩包,通过R CMD check –as-cranpackage_name.gz,并且其中不能有任何错误或警告。

进一步阅读