全中文网首份:R包上传到CRAN的心得分享

今天我的写的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 绝对能少走弯路。

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...