繁体   English   中英

使用建议的程序包时配置名称空间和说明

[英]Configuring NAMESPACE and DESCRIPTION when using a Suggested Package

我写了一个使用rstudioapi::viewer()函数的R包。 显然,并不是每个人都使用RStudio 我现在正NAMESPACE尝试正确配置NAMESPACEDESCRIPTION圈子。

为了避免强迫用户安装不需要的软件包(和/或在系统上无用的软件包),我尝试将rstudioapi放在“ Suggests部分,并视其可用性为条件:

if(.Platform$GUI == "RStudio") {
  if ("rstudioapi" %in% rownames(installed.packages())) {
    rstudioapi::viewer(outfile_path)
  } else {
    message("To view html content in RStudio, run install.packages('rstudioapi').")
    message("Switching method to 'browser'")
    method <- "browser"
  }

但是在R CMD CHECK ,我得到:

checking dependencies in R code ... WARNING
'::' or ':::' import not declared from: 'rstudioapi'

所以我去声明它,将importFrom(rstudioapi, viewer)到我的NAMESPACE 结果:

checking package dependencies ... ERROR
Namespace dependency not required: 'rstudioapi'

返回官方文档 ,我还尝试了以下方法:

if (requireNamespace("rstudioapi", quietly = TRUE)) {
    rstudioapi::viewer(outfile_path)
  } else { ...

无济于事:

checking dependencies in R code ... WARNING
'::' or ':::' import not declared from: 'rstudioapi'
'loadNamespace' or 'requireNamespace' call not declared from: 'rstudioapi'

所以我要么因未声明而得到警告,要么因声明而出错。 如果不这样做,该死的,如果做某事,该死的甚至更该死。 任何帮助表示赞赏。

这发生在我的另一种选择是简单地不列出rstudioapi在任何地方DESCRIPTION文件。 RStudio提供了一些使用查看器的技巧,这些技巧可能会有所帮助,并且不需要依赖rstudioapi

他们的建议是使用

viewer <- getOption("viewer")
if (!is.null(viewer))
  viewer("http://localhost:8100")
else
  utils::browseURL("http://localhost:8100")

之所以可行,是因为RStudio在启动时会创建一个名为viewer的选项,并使用一个函数填充该选项。 如果您不使用RStudio,则getOption("viewer")将返回NULL ,您可以将其重定向为使用系统的默认浏览器。 实质上,这是您已经完成的工作,但不需要其他依赖项。

这也具有比对检查快约1000倍的利益installed.packages ,但仍然以纳秒测量的,所以可能不是一个大问题(需要注意,我只安装了192包。这可能需要更长的时间,有一个系统上在CRAN上下载了所有内容)。

我弄清楚了为什么会有这些警告/错误。 当我将rstudioapi添加到“ Suggests:列表时,我无意中创建了第二个“ Suggests:列表。 仅考虑了第二个(是的,现有的位于描述文件的底部,我完全错过了它。我不会删除它,以防其他人碰巧...

我有一些想法可能会有所帮助。

参考Hadley Wickham的在线R包书籍可能会很有用: http : //r-pkgs.had.co.nz/description.html 我从他的书中学到了大部分(很少)有关包装的知识。

我认为您可以将带有以下代码的rstudioapi包添加到您的rstudioapi文件中的“ Suggests”字段下:

   devtools::use_package("rstudioapi", "Suggests")

我一直使用Roxygen2包(以及最近的devtools )与NAMESPACE文件进行交互,因此我不手动编辑NAMESPACE。

这是我的Description文件的外观:

    Package: stack3
    Type: Package
    Title: What the Package Does (Title Case)
    Version: 0.1.0
    Author: Who wrote it
    Maintainer: The package maintainer <yourself@somewhere.net>
    Description: More about what it does (maybe more than one line)
               Use four spaces when indenting paragraphs within the Description.
    License: What license is it under?
    Encoding: UTF-8
    LazyData: true
    Suggests:
         rstudioapi
    RoxygenNote: 5.0.1

然后我跑了

    devtools::build()

获取stack3_0.1.0.tar.gz文件。 请注意,我将程序包stack3命名为。 运行R CMD CHECK stack3_0.1.0.tar.gz时,看到没有错误和一个警告。 该警告是由于默认情况下,DESCRIPTION文件中“许可证:”之后的文本所致。

    R CMD CHECK stack3_0.1.0.tar.gz
    * using log directory ‘/Users/frederickboehm/Box Sync/stack3.Rcheck’
    * using R version 3.3.3 (2017-03-06)
    * using platform: x86_64-apple-darwin13.4.0 (64-bit)
    * using session charset: UTF-8
    * checking for file ‘stack3/DESCRIPTION’ ... OK
    * checking extension type ... Package
    * this is package ‘stack3’ version ‘0.1.0’
    * package encoding: UTF-8
    * checking package namespace information ... OK
    * checking package dependencies ... OK
    * checking if this is a source package ... OK
    * checking if there is a namespace ... OK
    * checking for executable files ... OK
    * checking for hidden files and directories ... OK
    * checking for portable file names ... OK
    * checking for sufficient/correct file permissions ... OK
    * checking whether package ‘stack3’ can be installed ... OK
    * checking installed package size ... OK
    * checking package directory ... OK
    * checking DESCRIPTION meta-information ... WARNING
    Non-standard license specification:
      What license is it under?
    Standardizable: FALSE
    * checking top-level files ... OK
    * checking for left-over files ... OK
    * checking index information ... OK
    * checking package subdirectories ... OK
    * checking whether the package can be loaded ... OK
    * checking whether the package can be loaded with stated dependencies ... OK
    * checking whether the package can be unloaded cleanly ... OK
    * checking whether the namespace can be loaded with stated dependencies ... OK
    * checking whether the namespace can be unloaded cleanly ... OK
    * checking loading without being on the library search path ... OK
    * checking examples ... NONE
    * checking PDF version of manual ... OK
    * DONE

    Status: 1 WARNING
    See
      ‘/Users/frederickboehm/Box Sync/stack3.Rcheck/00check.log’ for details.

希望我能理解您的问题,并且此回复对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM