用roxygen2覆盖NAMESPACE和Rd

时间:2016-11-10 15:14:46

标签: r rstudio roxygen2

我用RStudio创建了一个新包。在"配置构建工具"中,我检查"使用Roxygen"生成文档。

我第一次点击" Document"在" Build"窗格,一切正常:

# Generated by roxygen2: do not edit by hand

export(hello)

我得到了这个NAMESPACE:

hello.Rd

和此文件% Generated by roxygen2: do not edit by hand % Please edit documentation in R/hello.R \name{hello} \alias{hello} \title{Hello} \usage{ hello(x) } \arguments{ \item{x}{string} } \value{ a string }

hello.R

但是现在,我修改了文件roxygen2,然后我遇到了两个问题。 首先,出现此窗口:

enter image description here

如果我点击"是",则没有任何反应。

其次,似乎hello.Rd无法覆盖==> roxygen2::roxygenize('.', roclets=c('rd', 'collate', 'namespace')) Error: The specified file is not readable: U:\Data\Rtests\testPackage\man/hello.Rd Execution halted Exited with status 1. ,因为我在" Build"中得到了这个文字。窗格:

roxygen2::roxygenize(clean=TRUE)

我发现更新文档的唯一方法是运行:

Rd

此命令首先清除所有内容,NAMESPACE和Rd文件,然后生成NAMESPACE和Rtools文件。

我不知道这是Sys.setenv(PATH="%PATH%;C:/Program Files/Rtools/gcc-4.6.3/bin;C:/Program Files/Rtools/gcc-4.6.3/bin64;C:/Program Files/Rtools/gcc-4.6.3/i686-w64-mingw32/bin;C:/Program Files/Rtools/bin") 路径的问题。我试着设置路径:

roxygen2 5.0.1

但这并没有解决问题。

我正在使用:

  • R version 3.3.1

  • RStudio 0.99.892

  • Windows 7

  • {http://www.maaamet.ee/}featureNameType is referenced but not defined.

1 个答案:

答案 0 :(得分:4)

问题原因。

roxygen2包取决于digest包。在此函数调用digest函数时,digest包的file.access函数生成错误(指定的文件不可读) :https://github.com/eddelbuettel/digest/blob/master/R/digest.R#L102

我明白了:

> file.access("U:/Data", 4)
U:/Data 
     -1 

这意味着U:/Data没有读取权限。但事实并非如此:它具有读取权限。问题是我的U:驱动器是一个"网络驱动器",网络驱动器的file.access功能存在一些问题,我们可以在这里看到例如:{{ 3}}

解决方法

如果在R.utils::fileAccess函数中使用file.access代替digest::digest,问题就会解决。

因此,首先获取digest::digest函数的代码并按如下所示进行修改。

mydigest <- function (object, algo = c("md5", "sha1", "crc32", "sha256", 
    "sha512", "xxhash32", "xxhash64", "murmur32"), serialize = TRUE, 
    file = FALSE, length = Inf, skip = "auto", ascii = FALSE, 
    raw = FALSE, seed = 0, errormode = c("stop", "warn", "silent")) 
{
  file.access <- R.utils::fileAccess
  .... the code of the digest function here ...
}

然后做:

library(digest)
R.utils::reassignInPackage("digest", "digest", mydigest)

现在可以通过以下方式更新文档:

roxygen2::roxygenize()