【问题标题】:Error in R documentation using roxygen2使用 roxygen2 的 R 文档中的错误
【发布时间】:2018-10-13 23:22:52
【问题描述】:

在构建 R 包后,输入任何包的函数名称时都会出现以下错误:

Error in gzfile(file, "rb") : cannot open the connection

Screenshot of the problem.

当 R 尝试显示函数的提示(显示函数接受哪些参数的弹出窗口)时,显然会发生此错误。奇怪的是,使用 devtool 的 document() 函数后错误消失了。此外,输入“?function_name”后将不会显示帮助屏幕(使用 document() 后有效)

即使出现这个错误,包也能正常工作,问题是每次构建后,或者甚至在重新初始化 R 后再次加载包,这个错误都会回来,迫使用户使用 document() 来摆脱它,这很烦人。

我尝试重新安装 R,甚至在不同的系统上运行(起初我使用的是 windows 机器,但现在使用 ubuntu,问题仍然存在)。 还尝试创建其他几个测试包以查看错误是否特定于此包,但总是在创建的测试项目中第一次使用 document() 后,此错误开始发生。

我搜索了很多,最接近找到与我的类似问题的是以下帖子,这似乎是同样的问题,但没有得到解决:

https://community.rstudio.com/t/error-connecting-to-help-documenation/881

以下是我如何使用 roxygen2 编写文档的示例。

//'@title title...
//'
//'@description description...
//'@param params...
//'@export
// [[Rcpp::export]]
Rcpp::DataFrame test(Rcpp::DataFrame arg1, Rcpp::DataFrame arg2) {

    //code

}

谁能解释一下这个问题?

编辑:

似乎问题不会发生在不使用 Rcpp 的项目中,因此该错误可能与使用 roxygen2 的 Rcpp 文档有关。

这是 github 上一个包的链接,它给了我这个错误,以防有人想安装它并测试:

https://github.com/GoldenSushi/helpeR

【问题讨论】:

  • 欢迎来到 SO!不使用 Rcpp 的包也会发生这种情况吗?这是否也发生在您仅通过 library 加载(已安装)包的新 RStudio 会话中?
  • @RalfStubner:谢谢!关于第一个问题:不!我没有尝试在没有 Rcpp 的情况下构建包,但我现在才这样做,而且文档似乎工作正常;看起来问题可能在那里。关于新会话,是的,即使在初始化 R 后使用 library() 加载包后也会发生错误。
  • 我无法在一个简单的示例包中重现这一点。您能否创建一个可以共享的示例包(例如通过 github)或提供明确的步骤如何创建一个显示此错误的包?
  • @RalfStubner :当然!我在我的 github 页面上添加了一个帖子链接,其中包含一个项目。
  • @GoldenSushi 在运行devtools::document() 之前尝试运行Rcpp::compileAttributes()。最近这对我产生了影响。

标签: r rcpp devtools roxygen2


【解决方案1】:

简而言之,您没有以正确的顺序执行正确的命令。

你的回购本身很好(但需要工作)。

第 1 步:获取 repo

edd@rob:~$ mkdir /tmp/goldensushi
edd@rob:~$ cd /tmp/goldensushi/
edd@rob:/tmp/goldensushi$ git clone git@github.com:GoldenSushi/helpeR.git
Cloning into 'helpeR'...
remote: Counting objects: 186, done.
remote: Compressing objects: 100% (134/134), done.
remote: Total 186 (delta 42), reused 180 (delta 39), pack-reused 0
Receiving objects: 100% (186/186), 66.03 KiB | 1.54 MiB/s, done.
Resolving deltas: 100% (42/42), done.
edd@rob:/tmp/goldensushi$ 

第 2 步:compileAttributes 和 roxygenize

您必须先运行compileAttributes() 才能从 C++ 中获取 Roxygen 标签 到 R,然后调用 roxygenize 创建 Rd 文件。我为此使用了更小的脚本;其他人可能喜欢开发工具。没关系。你 仍然必须调用正确的底层 R 函数。

edd@rob:/tmp/goldensushi$ cd helpeR/
edd@rob:/tmp/goldensushi/helpeR(master)$ compAttr.r    # script: compileAttributes
edd@rob:/tmp/goldensushi/helpeR(master)$ roxy.r        # script: roxygenize()
Loading required package: Rcpp
Warning: @export [RcppExports.R#10]: unknown tag
Warning: @export [RcppExports.R#18]: unknown tag
Warning: @export [RcppExports.R#32]: unknown tag
Warning: @useDynLib [_roxyTags.R#2]: unknown tag
Warning: @importFrom [_roxyTags.R#3]: unknown tag
Warning: @export [file_readers.R#8]: unknown tag
Warning: @export [tablemanip.R#6]: unknown tag
Warning message:
Version of roxygen2 last used with this package is 6.0.1.9000. \
       You only have version 6.0.1 
edd@rob:/tmp/goldensushi/helpeR(master)$ 

您在使用 roxygen 时似乎也有一些问题。

第 3 步:构建包

我再次使用自己编写的帮助脚本(并在 littler 中发布)。没关系。您需要调用正确的 R 脚本。

edd@rob:/tmp/goldensushi/helpeR(master)$ build.r       # convenience script for R CMD build .
* checking for file ‘./DESCRIPTION’ ... OK
* preparing ‘helpeR’:
* checking DESCRIPTION meta-information ... OK
* cleaning src
* excluding invalid files
Subdirectory 'R' contains invalid file names:
  ‘_roxyTags.R’
* checking for LF line-endings in source and make files and shell scripts
* checking for empty or unneeded directories
* building ‘helpeR_1.0.tar.gz’

edd@rob:/tmp/goldensushi/helpeR(master)$

第 4 步:检查包

我再次使用了一个助手,这次是在 Gabor 的 rcmdcheck() 周围。您也可以拨打R CMD check ...

edd@rob:/tmp/goldensushi/helpeR(master)$ rcc.r helpeR_1.0.tar.gz   # convenience script for R CMD check
────────────────────────────────────────────────────────────────────────────────
─  using log directory ‘/tmp/file107a2d75f173/helpeR.Rcheck’
─  using R version 3.4.4 (2018-03-15)
─  using platform: x86_64-pc-linux-gnu (64-bit)
─  using session charset: UTF-8
✔  checking for file ‘helpeR/DESCRIPTION’
─  checking extension type ... Package
─  this is package ‘helpeR’ version ‘1.0’
✔  checking package namespace information
✔  checking package dependencies
W  checking if this is a source package
   Subdirectory ‘src’ contains:
     environment_calls.hpp table.hpp valid.hpp
   These are unlikely file names for src files.
✔  checking if there is a namespace
✔  checking for executable files
✔  checking for hidden files and directories
✔  checking for portable file names
✔  checking for sufficient/correct file permissions
─  checking whether package ‘helpeR’ can be installed ... [20s/17s] OK
✔  checking installed package size
✔  checking package directory
N  checking DESCRIPTION meta-information
   Malformed Title field: should not end in a period.
N  checking top-level files
   File
     LICENSE
   is not mentioned in the DESCRIPTION file.
✔  checking for left-over files
✔  checking index information
✔  checking package subdirectories
✔  checking R files for non-ASCII characters
✔  checking R files for syntax errors
✔  checking whether the package can be loaded
✔  checking whether the package can be loaded with stated dependencies
✔  checking whether the package can be unloaded cleanly
✔  checking whether the namespace can be loaded with stated dependencies
✔  checking whether the namespace can be unloaded cleanly
✔  checking loading without being on the library search path
✔  checking dependencies in R code
✔  checking S3 generic/method consistency
✔  checking replacement functions
✔  checking foreign function calls
N  checking R code for possible problems
   hread_table: no visible global function definition for ‘read.table’
   Undefined global functions or variables:
     read.table
   Consider adding
     importFrom("utils", "read.table")
   to your NAMESPACE file.
✔  checking Rd files
✔  checking Rd metadata
✔  checking Rd cross-references
✔  checking for missing documentation entries
✔  checking for code/documentation mismatches
W  checking Rd \usage sections
   Undocumented arguments in documentation object 'neural.arrange'
     ‘x’

   Functions with \usage entries need to have the appropriate \alias
   entries, and all their arguments documented.
   The \usage entries must correspond to syntactically valid R code.
   See chapter ‘Writing R documentation files’ in the ‘Writing R
   Extensions’ manual.
✔  checking Rd contents
✔  checking for unstated dependencies in examples
✔  checking line endings in C/C++/Fortran sources/headers
✔  checking compiled code
✔  checking examples
✔  checking PDF version of manual

   See
     ‘/tmp/file107a2d75f173/helpeR.Rcheck/00check.log’
   for details.



── 0 errors ✔ | 2 warnings ✖ | 3 notes ✖
edd@rob:/tmp/goldensushi/helpeR(master)$ 

简而言之:没有问题,Rcpp 肯定没有问题。您只是对其中一些工具缺乏经验,因此我建议您尝试更多地了解它们。

后记

您可能可以使用这些不依赖 littler 的替代命令:

edd@rob:/tmp/goldensushi/helpeR(master)$ Rscript -e 'Rcpp::compileAttributes()'
edd@rob:/tmp/goldensushi/helpeR(master)$ Rscript -e 'roxygen2::roxygenize()'
Loading required package: Rcpp
Warning message:
Version of roxygen2 last used with this package is 6.0.1.9000.  You only have version 6.0.1 
edd@rob:/tmp/goldensushi/helpeR(master)$ R CMD build .
* checking for file ‘./DESCRIPTION’ ... OK
[...]
* building ‘helpeR_1.0.tar.gz’

edd@rob:/tmp/goldensushi/helpeR(master)$ R CMD check helpeR_1.0.tar.gz
* using log directory ‘/tmp/goldensushi/helpeR/helpeR.Rcheck’
* using R version 3.4.4 (2018-03-15)
[...]
* checking PDF version of manual ... OK
* DONE

Status: 2 WARNINGs, 3 NOTEs
See
  ‘/tmp/goldensushi/helpeR/helpeR.Rcheck/00check.log’
for details.


edd@rob:/tmp/goldensushi/helpeR(master)$ 

【讨论】:

  • 我想这可能是我做错了什么,因为我对此很陌生。我会按照这些步骤尽快尝试重建,看看它是否能解决问题。感谢您的帮助!
猜你喜欢
  • 2013-09-24
  • 2015-12-30
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多