标签: r-package

将 R 包提交到 CRAN 时,指定了“LazyData”而没有“data”目录错误

当我在本地对我的包运行 devtools::check 时,我没有收到此错误,但是当我将我的包提交到 CRAN 或运行 devtools::check_win_devel 时,我收到此错误:

'LazyData' 没有指定 'data' 目录

大约一周前,我成功地将我的包提交给了 CRAN,但没有收到此错误,我更改的只是描述文件。

cran r-package

12
推荐指数
2
解决办法
787
查看次数

从编译的二进制版本“反向工程”R 包

我所在的组织拥有许多内部 R 包,这些包都是多年前编写的。这些文件存储为.zip在 R 3.x 下的 Windows 上构建的存档。它们无法在不重新构建的情况下加载到 Linux 或 macOS 或 R 4.y 下。不幸的是,我无权访问包源。他们输给了时间……

我想获取这些二进制文件,提取源代码,并根据当前的最佳实践(版本控制、roxygen2testthat等)重新打包它。最好的方法是什么?

我已经通过以下方式解决了其中一个二进制文件:

  1. 手动将加载的命名空间中的对象(导出和内部函数、数据集等)的源代码复制到新.R文件。
  2. 手动将 Roxygen 块添加到.R文件中,以便重现浏览器中显示的帮助页面。

我部分陷入(1),因为某些功能是 S4 通用的。dput(<name>)给出new("standardGeneric", ...)而不是简单的function定义。否则,这个过程相当简单,但非常耗时。

有没有办法以编程方式从 R 包二进制文件“反向工程”源文件,同时正确处理 S4 通用函数、类和方法?

在这个问题得到解决之前,组织中的每个人都将停留在 R 3.6 上。

r r-package

12
推荐指数
1
解决办法
580
查看次数

R包依赖

我正在尝试构建一个R包,但似乎包依赖性存在一些问题.如果我在R中运行代码,我需要包"rgdal"和"rgeos",所以为了创建它的包,我:

  • 在"NAMESPACE"文件中添加了"import(rgdal,rgeos)"行
  • 在DESCRIPTION文件中添加了"Depends:rgeos,rgdal"行

当我运行R CMD检查(构建后)后,我收到一条错误消息:

* checking package dependencies ... ERROR
Benötigte, aber nicht verfügbare Pakete:
  'rgeos' 'rgdal'

See the information on DESCRIPTION files in the chapter 'Creating R
packages' of the 'Writing R Extensions' manual.
Run Code Online (Sandbox Code Playgroud)

德国部分错误:"Benötigte,abernichtverfügbarePakete:"="需要,但没有可用的包裹".

我已经阅读了上述手册并了解了使用导入,建议或增强的选项,但我很确定依赖是我要使用的选项,因为在我的代码的功能中,我正在使用外部函数这两个包.

我究竟做错了什么?

dependencies r package cran r-package

11
推荐指数
1
解决办法
4213
查看次数

R中的包相对路径

我为使用相对路径的包编写了一些函数,例如:

"./data/foobar.rds"
Run Code Online (Sandbox Code Playgroud)

这是一个示例函数:

foo <- function(x) { 
x <- readRDS("./data/bar.rds")
return(x)
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我要在包的开发路径中工作,这就像我期望的那样工作.但是当我加载包时,此路径使用当前工作目录而不是包的相对路径.

如何设置它以使包中的函数路径保持在包相对路径中?

r r-package

11
推荐指数
1
解决办法
2741
查看次数

R检查警告:'vignettes'目录中的文件但'inst/doc'中没有文件

最近,当我进行颅骨检查时,我得到了关于Win R开发版的小插图的警告.

'vignettes'目录中的文件但'inst/doc'中没有文件

此警告仅在Win Dev版本中出现.对于Mac,AppVeyor和Travis不会出现警告.

问题是,我不知道警告要告诉我什么.据我所知,我不必将文件放在inst/doc中.

这是完整的警告信息:

Files in the 'vignettes' directory but no files in 'inst/doc':
'Figures.d/Rlogo.png', 'Figures.d/distribution.pdf',
'Figures.d/distributionbar.pdf', 'Figures.d/gapsize.pdf',
'Figures.d/imputations.pdf', 'Figures.d/imputations2.pdf',
'Figures.d/sponsorlogo.jpg', 'Figures.d/statsna.png',
'Figures.d/tsairgap.png', 'Introduction.pdf', 'Introduction.tex',
'RJournal.sty'
Run Code Online (Sandbox Code Playgroud)

r cran r-package

11
推荐指数
3
解决办法
2029
查看次数

R包中的reg.finalizer()不会在R会话结束时执行

?reg.finalizerR中的文档:

除其他外,它提供了一种方法来编写代码,以便在R会话结束时运行而无需进行操作.Last.为了在包中使用,通常最好在命名空间中的对象上设置终结器:然后在会话结束时调用终结器,或者在会话期间完成命名空间后不久调用它.

似乎我可以reg.finalizer()在R会话结束时使用运行某些代码,但它对我不起作用.我在https://github.com/yihui/finalizer-test准备了一个最小的包,它基本上包含以下代码:

e = new.env()

reg.finalizer(e, function(e) {
  message('Bye!')
}, onexit = TRUE)
Run Code Online (Sandbox Code Playgroud)

如果我只是在交互式R会话中运行上面的代码并退出会话,我可以看到该消息Bye!,但是如果我安装上面的包(你可以使用devtools::install_github('yihui/finalizer-test')),在R会话中加载它,并退出R会话,我看不到消息.我想知道为什么在这种情况下不执行终结器.

FWIW,当我安装软件包时,我可以看到以下消息Bye!:

$ R CMD INSTALL .

* installing to library ‘/Users/yihui/R’
* installing *source* package ‘finalizer’ ...
** R
** preparing package for lazy loading
No man pages found in package  ‘finalizer’ 
** help
*** installing help indices
Bye!
** building package indices
** testing if installed package can be …
Run Code Online (Sandbox Code Playgroud)

r finalizer r-package

11
推荐指数
1
解决办法
269
查看次数

在程序包加载/卸载时加载/删除用户定义的单元:最佳做法?

在我正在开发的包中,我需要定义一个新单元:飞行高度(FL)相当于100英尺.

units包提供以下可能性:

units::install_conversion_constant("FL", "ft", 100)
Run Code Online (Sandbox Code Playgroud)

为了使包test(devtools::test())和包check(devtools::test())都能使用这个用户定义的单元进行单元测试,我发现我需要在包加载阶段注册它.

这是我做的:

zzz.R(一个新的文件,按照"当你需要的副作用"一节):

# register flight levels (FL) as a unit when loading this package
.onLoad <- function(libname, pkgname) {
  # install user-define unit for flight level
  units::install_conversion_constant("FL", "ft", 100)

  invisible()
}

# register flight levels (FL) as a unit when loading this package
.onUnload <- function(libname, pkgname) {
  # uninstall user-define unit for flight level
  units::remove_symbolic_unit("FL")

  invisible()
}
Run Code Online (Sandbox Code Playgroud)

如果不这样做并将单元注册码放在某个R/unit-conversion.R …

r units-of-measurement r-package

11
推荐指数
1
解决办法
162
查看次数

在R中加载包时使用引号

加载包装时是否有理由更喜欢使用引号; 例如

library("MASS")
Run Code Online (Sandbox Code Playgroud)

过度加载包而不将名称放在引号中;

library(MASS)
Run Code Online (Sandbox Code Playgroud)

回顾一些旧的代码,我似乎在两者之间切换,没有明显的后果.是否有最佳实践建议?

r r-package

10
推荐指数
1
解决办法
1514
查看次数

什么导致"必须从我的R包中请求至少一种颜色的色调调色板"错误只在基于Linux的构建?

我目前正在检查一些代码以实现跨平台兼容性.我正在使用Travis-CI在GitHub提交的ubuntu下构建我的R包.如果我删除了这一个单独的部分,它就会成功构建,但是如果我包含这个代码,我会收到错误:

Must request at least one colour from a hue palette.
Run Code Online (Sandbox Code Playgroud)

这种构建很好并且在Windows和OS X上正常工作,这个问题只出现在ubutu构建中.我还想指出这是在执行后面的代码的插图生成步骤期间发生的.此错误消息似乎源自R scale库中的此功能.

我有一些看起来像这样的数据:

gene <- c("ISG20","ISG20","HEY1","ISG20","ACTB","MDM2","CDYL","HEY1","ACTB","UTP3","MDM2") 
variable <- c("6h_ebov","1d_ebov","1d_ebov","2d_ebov","2d_ebov","2d_ebov","2d_restv","2d_restv","2d_restv","2d_restv","2d_restv")
value <- c(-4.54267311671893,0.523667984831315,0.552671011358972,3.97643775389922,0.888734866999937,1.26719604773752,1.31653814202267,2.28445821019938,1.00301304727651,1.86941283629719,1.33916249182697 )

filteredList <- data.frame(gene,variable,value)

> head(filteredData)
   gene variable      value
1 ISG20  6h_ebov -4.5426731
2 ISG20  1d_ebov  0.5236680
3  HEY1  1d_ebov  0.5526710
4 ISG20  2d_ebov  3.9764378
5  ACTB  2d_ebov  0.8887349
6  MDM2  2d_ebov  1.2671960
Run Code Online (Sandbox Code Playgroud)

我使用ggplot2来显示这些数据,我的命令大致如下:

library(ggplot2)
library(ggthemes)

stata_long_pal = c(stata_pal("s2color")(15), stata_pal("s1rcolor")(15))
plot_out <- ggplot(filteredList, aes(x=value, y=factor(variable, levels=as.character(unique(variable)), ordered=TRUE), label=variable, col=variable)) + 
        geom_point(stat='identity', aes(col=variable), size=3) +
        theme_stata() …
Run Code Online (Sandbox Code Playgroud)

ubuntu compiler-errors r ggplot2 r-package

10
推荐指数
1
解决办法
4351
查看次数

可以在roxygen2代码块中使用换行符吗?

我想知道在记录函数时是否可以在roxygen2中的代码块中插入换行符?

如果我有内容\code{},roxygen2默认将所有换行折叠为单个空格.我尝试插入\cr内部来强制执行换行符,然后我得到了所需的行为,但是当我"R CMD CHECK"时我得到一个警告.有没有办法做到这一点?

例:

#' \code{
#'   multiple
#'   lines
#' }
Run Code Online (Sandbox Code Playgroud)

documentation r r-package

9
推荐指数
1
解决办法
1037
查看次数