今天我的写的R包ggrcs已经在CARN上架了,不再是一个野包了,属于正规军了,以后有需要的可以通过下面命令下载了
install.packages("ggrcs")
R包写好以后,本来想更新一些内容,完善R包,但是有大佬提醒我要先进行上传到CRAN,免得名字被别人抢注册了。于是这几天都在研究怎么上传,参考的书主要就是:Hadley Wickham:R Packages和Writing R Extensions。R包上传到CRAN,也经历了一些曲折,本来想借鉴一下别人的经验,不知道是不是因为太简单了,网上这方面的东西中文的根本没人写,于是就想分享一下我的经验,让后来者少走弯路。最简单的是通过devtools包的devtools::release(),上传以后会提一些问题,回答是就可以了,然后还会进行邮箱验证,验证以后就算上传成功了。
上传以后显示
就是一个警告和3个注意,这就表示上传失败,我们要弄成0警告和0注意才有可能上传成功
1个警告是:命名空间没有我的这些变量
Undefined global functions or variables:
…density… Pre0 aes density element_blank geom_histogram geom_line
geom_ribbon ggplot labs lower rescale scale_y_continuous sec_axis
theme theme_bw upper yhat
Consider adding
importFrom(“stats”, “density”)
to your NAMESPACE file.
就是说这些变量要写入命名空间,这些变量是我的主函数的变量
但是命名空间没有上面的这些
所以我们要用importFrom()形式把它列出来的这些变量写入命名空间,不能直接在命名空间(NAMESPACE)修改,我们要现在主程序中我的这里是ggrcs.R添加,形式如下这种形式:
importFrom "stats" "density"
填好以后还需要使用代码devtools::document()重新写入,进行代码更新,这样我们看到命名空间的内容就更新了
接下来我们来看看3个注意,有一个是英文拼写不对就不说了。其中有一个是
checking R code for possible problems … NOTE
ggrcs: no visible global function deFinition for ‘density’
ggrcs: no visible global function deFinition for ‘ggplot’
ggrcs: no visible global function deFinition for ‘aes’
ggrcs: no visible global function deFinition for ‘geom_histogram’
ggrcs: no visible global function deFinition for ‘rescale’
ggrcs: no visible binding for global variable ‘…density…’
ggrcs: no visible global function deFinition for ‘geom_line’
ggrcs: no visible binding for global variable ‘yhat’
ggrcs: no visible global function deFinition for ‘geom_ribbon’
ggrcs: no visible binding for global variable ‘lower’
ggrcs: no visible binding for global variable ‘upper’
ggrcs: no visible global function deFinition for ‘theme_bw’
ggrcs: no visible global function deFinition for ‘theme’
ggrcs: no visible global function deFinition for ‘element_blank’
ggrcs: no visible global function deFinition for ‘labs’
ggrcs: no visible global function deFinition for ‘sec_axis’
predata.coxph: no visible binding for global variable ‘Pre0’
predata.lrm: no visible binding for global variable ‘Pre0’
Undefined global functions or variables:
…density… Pre0 aes density element_blank geom_histogram geom_line
geom_ribbon ggplot labs lower rescale sec_axis theme theme_bw upper
yhat
Consider adding
importFrom(“stats”, “density”)
说我的变量如Pre0在函数中没有进行绑定
这个很好解决,你写得函数开头中加一句
Pre0<-NULL
就可以了,其他没有绑定的变量也是这样解决。
no visible global function deFinition
函数没有在全局定义这个有点麻烦,我查看了一下别人的做法是使用globalVariables函数,可以在你的函数名头前加一下代码
globalVariables(c(
'Pre0',
'aes',
'..density..',
'density',
'element_blank',
'geom_histogram',
'geom_line',
'geom_ribbon',
'ggplot',
'labs',
'lower',
'rescale',
'scale_y_continuous',
'sec_axis',
'theme',
'theme_bw',
'upper',
'yhat'
))
这个代码就是告诉R函数这些变量视为全局定义了。
还有一个注意点是
Namespaces in Imports field not imported from:
‘ggplot2’ ‘rms’ ‘scales’
All declared Imports should be used.
这个注意点的内容其实和警告那个点的是一样的,解决了警告的内容,这个内容也相应的解决了。有一点要注意一下,我们在Imports:部分填入R包的时候不要手工填入而是要使用代码如:
usethis::use_package('ggplot2')
然后在Imports:部分就会自动填入R包
经过一系列处理以后,终于变成全部都是0 了,然后继续使用代码devtools::release()重新上传了,接下来就是等待了。
CRAN的处理效率很高,基本都是当天回复了,一般后期都是一些都是一些描述文件书写的问题,比如说我这个标题A Function to是要去掉的,关于名称的首个字母都是需要大写的。在描述文件中,R包的名称需要用单引号括起来,有关于函数(Function)的名称前面要加一个括号(),要写Authors@R添加用维护和更新R包的人是谁。弄好以后就可以通过了,CRAN的工作人员非常耐心和细心,还帮我弄了一个使用手册,这里要点一个赞。
小提示:
上传前最好仔细研究大佬写得:Hadley Wickham:R Packages 绝对能少走弯路。