构建R包时出现“没有可见的全局函数定义”问题,涉及shiny函数。

3

我正在尝试使用以下方式检查我的包:

Rcmd.exe check dbt.ORA_1.0.tar.gz.

尽管在Description文件中添加了“Depends:shiny”,但我仍然收到很多警告,例如:
...
- dbtORA:未找到“runApp”的全局函数定义 - dbtORA:未找到“fluidPage”的全局函数定义 - dbtORA:未找到“titlePanel”的全局函数定义 - dbtORA:未找到“sidebarLayout”的全局函数定义 - dbtORA:未找到“sidebarPanel”的全局函数定义 - dbtORA:未找到“selectInput”的全局函数定义 - dbtORA:未找到“checkboxInput”的全局函数定义 - dbtORA:未找到“conditionalPanel”的全局函数定义 - dbtORA:未找到“numericInput”的全局函数定义 - dbtORA:未找到“actionButton”的全局函数定义 - dbtORA:未找到“mainPanel”的全局函数定义 - dbtORA:未找到“textOutput”的全局函数定义 - dbtORA:未找到“uiOutput”的全局函数定义
...
函数dbtORA非常长,源代码如下:
dbtORA <-function(){
...
outputApp=runApp(list(
  ui = fluidPage(
...
),
 server = function(input, output, session){
...
  }  
))
...
return(outputApp=NamedORAResults)}

在这个背景下,我还有一个问题:

如何声明仅在本地定义的函数,例如在

dbtORA <-function(){
...
matlabmin=function(...){...}
...}

出现以下警告:

  • dbtORA: 'matlabmin'没有可见的全局函数定义

根据您使用的包是否有绑定变量的方法,可能需要进行一些修复。通用的解决方法是在调用变量之前,在脚本顶部放置“dbtORA <- NULL”。问题在于,您可能有某种函数,该函数可能正在从数据框或列表中读取变量并使用非标准评估。 - Tyler Rinker
dbtORA是一个函数而非变量,它使用许多其他函数并能启动一个漂亮的界面。我不理解你的建议。 - mthrun
1
你是否在NAMESPACE中导入了你正在使用的包函数?解决方案取决于你是手动管理还是使用类似于devtools的工具。 - Tyler Rinker
请问您能详细说明一下吗?我使用带有Rtools的Rstudio,所有检查都是自动完成的。 - mthrun
你使用roxygen2吗?如果没有的话,我强烈推荐它(+ devtools;这是内置在很多RStudio中的)。这里有更多关于命名空间的信息:http://cran.r-project.org/doc/manuals/r-release/R-exts.html#Package-namespaces,但是roxygen会使这个管理更容易。 - Tyler Rinker
1个回答

2

对于所有遇到同样问题的人:

  1. In the DESCRIPTION file you have to write

    Imports: shiny

    and not

    Depends: shiny

  2. In the NAMESPACE file you have to write

    import(shiny)
    

不知道为什么只有使用shiny才能这样做...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接