2017-04-09 62 views
2

我写了一个使用rstudioapi::viewer()函数的R软件包。显然,并非所有人都使用RStudio。我现在正在试图正确配置NAMESPACEDESCRIPTION使用建议的软件包时配置NAMESPACE和DESCRIPTION

所以不强迫用户安装一个包,他们并不需要(和/或将他们的系统没用),我试图把rstudioapiSuggests部分,并称之为有条件的可用:

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' 

返回到official docs,我也试过如下:

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' 

所以我要么得到一个警告,没有报关它,或者声明它的错误。如果你不这样做,那该死的,如果你确实有点不对劲,更是该死的。任何帮助赞赏。

+0

如果在'R'目录中的任何代码中都使用了'rstudioapi',则应该将它添加到DESCRIPTION文件中的'Imports'。 'Suggests'适用于您的示例或短片中运行的代码,但不用于实际代码。 – Benjamin

+0

不符合官方文档...请参阅https://cran.r-project.org/doc/manuals/r-release/R-exts.html中的第1.1.3.1节...可以预料,某些代码将在一些平台上相关,而不是其他人,所以我很确定必须有一个解决方案... –

+0

问题解决了...请参阅下面我自己的答案。 –

回答

3

另一个这发生在我的选择是根本就不是你的DESCRIPTION文件列出rstudioapi任何地方。RStudio具有tips for using the viewer可能会有所帮助,不需要在rstudioapi的依赖。

他们的建议是使用

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

这是有效的,因为在启动时,RStudio会创建一个操作称为viewer并填充一个函数。如果您没有使用RStudio,getOption("viewer")将返回NULL,您可以重定向它以使用系统的默认浏览器。这基本上是你已经完成的工作,但不需要额外的依赖关系。

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

+1

这就像一个魅力。当我看到0错误时,我总是感到满意0个警告| 0笔记':D –

0

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

参考Hadley Wickham的在线R包书:http://r-pkgs.had.co.nz/description.html可能会有帮助。我从他的书中了解了大部分(我很少)关于软件包的知识。

我认为,你可以添加到你的描述文件,根据“建议”用下面的代码字段包rstudioapi

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

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

这里是我的说明文件看起来像:

Package: stack3 
    Type: Package 
    Title: What the Package Does (Title Case) 
    Version: 0.1.0 
    Author: Who wrote it 
    Maintainer: The package maintainer <[email protected]> 
    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时,我看到没有错误和一个警告。该警告是由于默认情况下的文本遵循许可证:在描述文件中。

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. 

我希望我明白你的问题,并且这个回应是有帮助的。

+0

感谢您的回答。看起来,HW的页面几乎可以解释我上次根据官方文档尝试过的内容......在你的代码中(不包括examples/vignettes),你是否包含条件执行,如'if(requireNamespace(“pkg”,quietly = TRUE)){pkg :: f()}'? –

+0

我不知道我是否理解你的问题,但是当你的包中包含调用''viewer''的代码时,我想你想用'ƒudioudioapi'替换'pkg'并用'viewer'替换''f'', rstudioapi ::观众()'。那有意义吗?或者我误解了一些东西? –

+0

我不确定您需要编辑NAMESPACE文件。 –

2

我想出了为什么我有这些警告/错误。当我在Suggests:列表中添加rstudioapi时,我无意中创建了一个第二个Suggests:列表。只有第二个被考虑到了(是的,现有的是在DESCRIPTION文件的底部,完全是我错过了。我不是在擦除这个以防万一它碰巧发生在其他人身上......

+0

谢谢。这发生在我身上:-) –