R CMD检查 - 包可以安装但不能加载

时间:2016-01-15 10:38:05

标签: r devtools roxygen2 r-package

我创建了一个名为letstrythis的测试包来说明问题。测试包非常简单,包含以下文件:

  • DESCRIPTION

    Package: letstrythis
    Title: What the Package Does (one line, title case)
    Version: 0.0.0.9000
    Authors@R: person("Mike", "Smith", email = "Mike.Smith@anything.com", role = c("aut", "cre"))
    Description: letstrythis is great.
    Depends:
        R (>= 3.2.3)
    License: GPL
    LazyData: true
    Maintainer: 'Mike Smith' <Mike.Smith@anything.com>
    RoxygenNote: 5.0.1
    
  • NAMESPACE

    # Generated by roxygen2: do not edit by hand
    export(add_numbers)
    
  • R/add-numbers.R

    #' test function
    #'
    #' @param x numeric
    #' @param y numeric
    #' @return numeric
    #' @export
    #'
    #' @examples
    #' add_numbers(1, 1)
    #' add_numbers(2, 3)
    
    
    add_numbers <- function(x, y) {
      x + y
    }
    

  • man/add_numbers.Rd

由roxygen2自动创建。

每次用devtools::check()检查我的包时,都会收到以下错误消息:

* checking examples ... ERROR
Running examples in 'letstrythis-Ex.R' failed
The error occurred in:

R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree"
Copyright (C) 2015 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> pkgname <- "letstrythis"
> source(file.path(R.home("share"), "R", "examples-header.R"))
> options(warn = 1)
> options(pager = "console")
> base::assign(".ExTimings", "letstrythis-Ex.timings", pos = 'CheckExEnv')
> base::cat("name\tuser\tsystem\telapsed\n", file=base::get(".ExTimings", pos = 'CheckExEnv'))
> base::assign(".format_ptime",
+ function(x) {
+   if(!is.na(x[4L])) x[1L] <- x[1L] + x[4L]
+   if(!is.na(x[5L])) x[2L] <- x[2L] + x[5L]
+   options(OutDec = '.')
+   format(x[1L:3L], digits = 7L)
+ },
+ pos = 'CheckExEnv')
> 
> ### * </HEADER>
> library('letstrythis')
Error in library("letstrythis") : 
  there is no package called 'letstrythis'
Execution halted
* checking PDF version of manual ... OK
* DONE
Status: 1 ERROR

See
  'Z:/R_codes/letstrythis.Rcheck/00check.log'
for details.

Error: Command failed (1)
Execution halted

Exited with status 1.

每次执行library()中的示例时,无法使用R/add-numbers.R加载包。

1 个答案:

答案 0 :(得分:2)

Setting the library location in the call to library() helps. This might not be the ideal solution when writing general examples that will be published. For me, it was helpful when running tests during devtools::check(). I had the same issues when working on a network drive, i.e. packages specified in tests/testthat.R could not be loaded via library(). Instead of copying the whole package under development to a local drive I used the command

library(package_under_dev, lib.loc = "..")

in the tests/testthat.R file. The command will load the package from the root of the current working directory. This is helpful during devtools::check(), because it will make R use the clean package located in the temporary package_under_dev.Rcheck folder which is created during the checking routine.

Alternatively, one could also add the root folder to the search paths via

.libPaths(c("..", .libPaths()))

and then one doesn't need to specify it in the call to library(). Maybe this would help in case of check()ing the examples.

Playing around with R_LIBS_USER, as suggested here, did not work for me.