当我在本地对我的包运行 devtools::check 时,我没有收到此错误,但是当我将我的包提交到 CRAN 或运行 devtools::check_win_devel 时,我收到此错误:
'LazyData' 没有指定 'data' 目录
大约一周前,我成功地将我的包提交给了 CRAN,但没有收到此错误,我更改的只是描述文件。
我所在的组织拥有许多内部 R 包,这些包都是多年前编写的。这些文件存储为.zip在 R 3.x 下的 Windows 上构建的存档。它们无法在不重新构建的情况下加载到 Linux 或 macOS 或 R 4.y 下。不幸的是,我无权访问包源。他们输给了时间……
我想获取这些二进制文件,提取源代码,并根据当前的最佳实践(版本控制、roxygen2、testthat等)重新打包它。最好的方法是什么?
我已经通过以下方式解决了其中一个二进制文件:
.R文件。.R文件中,以便重现浏览器中显示的帮助页面。我部分陷入(1),因为某些功能是 S4 通用的。dput(<name>)给出new("standardGeneric", ...)而不是简单的function定义。否则,这个过程相当简单,但非常耗时。
有没有办法以编程方式从 R 包二进制文件“反向工程”源文件,同时正确处理 S4 通用函数、类和方法?
在这个问题得到解决之前,组织中的每个人都将停留在 R 3.6 上。
我正在尝试构建一个R包,但似乎包依赖性存在一些问题.如果我在R中运行代码,我需要包"rgdal"和"rgeos",所以为了创建它的包,我:
当我运行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:"="需要,但没有可用的包裹".
我已经阅读了上述手册并了解了使用导入,建议或增强的选项,但我很确定依赖是我要使用的选项,因为在我的代码的功能中,我正在使用外部函数这两个包.
我究竟做错了什么?
我为使用相对路径的包编写了一些函数,例如:
"./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)
现在,如果我要在包的开发路径中工作,这就像我期望的那样工作.但是当我加载包时,此路径使用当前工作目录而不是包的相对路径.
如何设置它以使包中的函数路径保持在包相对路径中?
最近,当我进行颅骨检查时,我得到了关于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) 从?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) 在我正在开发的包中,我需要定义一个新单元:飞行高度(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 …
加载包装时是否有理由更喜欢使用引号; 例如
library("MASS")
Run Code Online (Sandbox Code Playgroud)
过度加载包而不将名称放在引号中;
library(MASS)
Run Code Online (Sandbox Code Playgroud)
回顾一些旧的代码,我似乎在两者之间切换,没有明显的后果.是否有最佳实践建议?
我目前正在检查一些代码以实现跨平台兼容性.我正在使用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) 我想知道在记录函数时是否可以在roxygen2中的代码块中插入换行符?
如果我有内容\code{},roxygen2默认将所有换行折叠为单个空格.我尝试插入\cr内部来强制执行换行符,然后我得到了所需的行为,但是当我"R CMD CHECK"时我得到一个警告.有没有办法做到这一点?
例:
#' \code{
#' multiple
#' lines
#' }
Run Code Online (Sandbox Code Playgroud)