我最近更新到R 3.1.3,我正在使用RStudio和packrat.我正在尝试使用RStudio在构建的"构建和重新加载"工具中重新构建我的包,但它不起作用.我一直收到以下错误:
Updating standaRd documentation
Loading standaRd
Error in (function (dep_name, dep_ver = NA, dep_compare = NA) :
Dependency package ggplot2 not available.
Calls: suppressPackageStartupMessages ... <Anonymous> -> load_all -> load_depends -> mapply -> <Anonymous>
Execution halted
Exited with status 1.
Run Code Online (Sandbox Code Playgroud)
问题是,我已经ggplot2在所有地方安装了包括我的本地库和我的包装库,用于R 3.1.2和R 3.1.3的这个项目.我试过加载它们无济于事.
另外,使用devtools::build()和devtools::document()都工作,所以我假设这是一个RStudio问题?
注意:我使用的是RStudio版本0.99.235.
编辑:我也看不到我的包的任何文档,它似乎不在我的packrat库中.
第二次编辑:我已经卸载了R 3.1.3并恢复到R 3.1.2并且我仍然遇到同样的问题.
第三次编辑:这些是我的依赖:
Depends:
R (>= 3.1.2),
ggplot2 (>= 1.0.0),
grid
Run Code Online (Sandbox Code Playgroud) 我正在构建一个使用data.table的包,应该使用package testthat进行测试.虽然代码在从命令行调用时工作正常,但在从测试用例调用时会遇到问题.似乎在运行测试时使用了基本包中的[]函数,即data.frames的函数.
我创建了一个最小的例子,可以在这里找到:https://github.com/utalo/test_datatable_testthat
该软件包包含一个函数:
test <- function() {
dt <- data.table(MESSAGE="Test 1234567890",TYPE="ERROR")
dt[,.(MESSAGE=strwrap(MESSAGE,width = 10)),by=.(TYPE)]
}
Run Code Online (Sandbox Code Playgroud)
test.datatable.testthat:::test()从命令行调用时,我得到了预期的结果:
TYPE MESSAGE
1: ERROR Test
2: ERROR 1234567890
Run Code Online (Sandbox Code Playgroud)
但是,在执行以下单元测试时:
test_that("Test package",{
dt <- test()
expected_res <- structure(list(TYPE = c("ERROR", "ERROR"),
MESSAGE = c("Test","1234567890")),
row.names = c(NA, -2L), class = c("data.table","data.frame"),
.Names = c("TYPE", "MESSAGE"))
expect_equal(dt,expected_res)
})
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
1
1. Error: Test package -------------------------------------------------------------------------------------------------------
could not find function "."
1: withCallingHandlers(eval(code, new_test_environment), error = capture_calls, message = function(c) invokeRestart("muffleMessage"))
2: …Run Code Online (Sandbox Code Playgroud) 我将接管CRAN上的R软件包的积极开发和维护(当然是在当前维护者的批准下).实现这一目标的必要步骤是什么/我们应该如下进行?:(我假设只有当前维护者有权提交包的更新版本,对吧?)
那会把我变成包的活跃维护者吗?
编辑:为了澄清,我目前不是包中列出的作者.
我有一个自定义的包summary(),print()对于具有特定类对象的方法.这个软件包还使用了很棒dplyr的数据包进行操作 - 我希望我的用户能够编写同时使用我的软件包和dplyr的脚本.
其他人在这里和这里注意到的一个障碍是dplyr动词不保留自定义类 - 这意味着ungroup命令可以剥离我的自定义类的data.frames,从而搞乱方法调度summary等.
Hadley说"正确执行此操作取决于您 - 您需要为每个dplyr方法定义一个方法,以便正确恢复所有类和属性"并且我正在尝试接受建议 - 但我无法弄清楚如何正确包装dplyr动词.
这是一个简单的玩具示例.假设我已经定义了一个cars类,我有一个自定义summary.
library(tidyverse)
class(mtcars) <- c('cars', class(mtcars))
summary.cars <- function(x, ...) {
#gather some summary stats
df_dim <- dim(x)
quantile_sum <- map(mtcars, quantile)
cat("A cars object with:\n")
cat(df_dim[[1]], 'rows and ', df_dim[[2]], 'columns.\n')
print(quantile_sum)
}
summary(mtcars)
Run Code Online (Sandbox Code Playgroud)
small_cars <- mtcars %>% filter(cyl < 6)
summary(small_cars)
class(small_cars)
Run Code Online (Sandbox Code Playgroud)
那个summary调用small_cars …
我有R包,它的功能之一 - 产生报告.在inst/markdown中我有一个模板rep.rmd.在包函数ProduceReport()中我有这样的代码:
render.file <-"rep.Rmd"
render.file <- system.file(TEMPLATES.PATH, render.file, package=getPackageName())
render.dir <- dirname(render.file)
pdf.file <- "example.pdf"
rmarkdown::render(render.file , quiet = FALSE, output_format = "pdf_document")
Run Code Online (Sandbox Code Playgroud)
它可以工作,但在执行时markdown会生成目录临时文件
rep_cache,rep_files
我想并行测试此报告生成函数(当.rmd文件使用不同的输入运行并生成不同的报告时). 我的第一个问题是,是否可以并行运行具有不同输入的相同.rmd文件?
我想临时目录应该有唯一的名称,以避免写入相同的文件.我发现了争论
intermediates_dir =,knit_root_dir =
在rmarkdown :: render()函数中.但是,当我尝试使用创建的dir定义此参数时,pandoc会产生错误(并且rep_cache,rep_files目录仍在其位置).
请,任何建议.
我无法在R包帮助中显示编号列表.
这是我在roxygen中所拥有的:
#' @return
#' Bunch of text
#' Bunch of text:
#' \enumerate {
#' \item a
#' \item b
#' \item c
#' }
Run Code Online (Sandbox Code Playgroud)
这显示没有数字.保存文件后,单击Build & Reload in RStudio,然后运行devtools::document,然后devtools::load_all.当我在包上运行帮助时,我在控制台中收到以下消息:
Using development documentation for function name
Run Code Online (Sandbox Code Playgroud) 我正在创建一个包含Rcpp函数的R包,这取决于RcppArmadillo,所以我首先生成包骨架RcppArmadillo.package.skeleton.但是,当roxygenize我的包裹,它给我一个错误如下所示.
R代码
library(roxygen2)
library(RcppArmadillo)
library(Rcpp)
RcppArmadillo.package.skeleton(name = "prac_181206", example_code = FALSE)
roxygenize(package.dir = "prac_181206", roclets = "rd")
Run Code Online (Sandbox Code Playgroud)
错误
Error in getDLLRegisteredRoutines.DLLInfo(dll, addNames = FALSE) :
must specify DLL via a “DLLInfo” object. See getLoadedDLLs()
Run Code Online (Sandbox Code Playgroud)
花了一些时间后,我想通过删除文件中的.registration选项可以解决这个问题,NAMESPACE如下所示.
原始NAMESPACE文件
useDynLib(prac_181206, .registration=TRUE)
importFrom(Rcpp, evalCpp)
exportPattern("^[[:alpha:]]+")
Run Code Online (Sandbox Code Playgroud)
简而言之,在更改上面的第一行后useDynLib(prac_181206),它工作正常,但我不明白错误的含义以及我的解决方案的工作原理.
你能帮我解决这个问题吗?我很感激!
因为这是一个玩具示例,希望可以重现,我没有包含上面创建的任何其他功能man或src文件夹RcppArmadillo.package.skeleton.
仅供参考,有关我平台的相关信息是
我已经写了这个R包,需要花很多时间(> 10s,有时长达20-30s!)来加载。
每次加载软件包时,例如在步骤中构建软件包"** testing if installed package can be loaded"或直接调用library("my.package")时,20秒钟都不会发生任何反应。
这使开发过程中的所有事情都非常缓慢:构建文档,构建软件包,运行R检查...
我当然有怀疑(看着你,狡猾的依赖性),但是我需要在消除之前收集证据。
有没有一种方法可以分析软件包的加载情况,以便找出原因?或更笼统地说,我如何弄清楚到底发生了什么?
在我的包 {bigstatsr} 中,我在 Solaris 上测试时收到 CRAN 检查的这个错误(请参阅https://www.r-project.org/nosvn/R.check/r-patched-solaris-x86/bigstatsr-00check。 html)。
我设法使用rhub::check_on_solaris(). 默认情况下,创建的文件具有权限,644因为 umask 设置为22.
然后,我尝试将 umask 更改为0,这有效并且我获得了文件权限666(参见https://builder.r-hub.io/status/bigstatsr_1.0.0.tar.gz-a15ab823b9e44e6ca790ee9a143ebadb#L5816)。
如何同时有关于这个文件的权限,我可以得到这个错误与文件的权限666?
使用BoostC 语言开发一个小的 Rcpp 包和它的一些几何函数。
完成了函数的编写,一切运行良好。Clean and Rebuild最后一次测试一切正常(并测试功能),然后再推送到 GitHub。一旦我仔细检查了该目录是否全部干净地存储在 GitHub 中,我就从本地计算机中删除了该目录。还应该注意的是,我有 Roxygen2 在此运行并管理NAMESPACE文件。
克隆回目录后,Clean and Rebuild出现以下错误:
==> Rcpp::compileAttributes()
* Updated R/RcppExports.R
==> R CMD INSTALL --preclean --no-multiarch --with-keep.source MinimumRcpp
* installing to library ‘/Library/Frameworks/R.framework/Versions/3.5/Resources/library’
* installing *source* package ‘MinimumRcpp’ ...
clang++ -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I/usr/local/include -fPIC -Wall -g -O2 -c RcppExports.cpp -o RcppExports.o
** libs
clang++ -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I/usr/local/include -fPIC -Wall -g -O2 -c findParetoSet.cpp -o findParetoSet.o
clang++ -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" …Run Code Online (Sandbox Code Playgroud)