RStudio Addin:小工具不工作(依赖问题)

时间:2016-03-23 13:45:35

标签: r shiny r-package

我的问题与包的开发有关。因此,一个可重复性最小的示例意味着您应该创建最小的包。我基本上是在尝试构建一个简单的RStudio小工具。以下是此包中唯一的.R脚本的内容:

#' Gadget
#'
#' A short description
#'
#' @usage myAddin()
#' @import shiny
#' @import miniUI
#' @import shinyFiles
#' @import rstudioapi
#' @export


myAddin <- function() {

  requireNamespace("shinyFiles")
  requireNamespace("miniUI")
  requireNamespace("shiny")

  ui <- miniPage(gadgetTitleBar("My Addin"),
                 miniTabstripPanel(miniContentPanel(HTML("<center>"),
      shinySaveButton("backup", "Save file", "Save file as...", filetype = list(RData = "RData"))
    )


  server <- function(input, output, session) {
    volumes <- getVolumes()

    shinyFileSave(input, "backup", roots = volumes,
      session = session, restrictions = system.file(package = "base"))

    observeEvent(input$backup, {
      input <- parseSavePath(volumes, input$backup)
      stopApp()
    })

    observeEvent(input$done, {
      stopApp()
    })
  }
  viewer <- dialogViewer("My Addin", width = 350,
    height = 500)
  runGadget(ui, server, viewer = viewer)
}

为了使小工具在RStudio中可用,您必须在包根目录的子目录addins.dcf中添加文件inst/rstudio/(所以myAddin/inst/rstudio/addins.dcf)。它的内容是

Name: myAddin
Description: My first Addin
Binding: myAddin
Interactive: true

如果您自己构建此软件包并安装它,您将在上下文菜单中找到addin myAddin

enter image description here

如果您启动插件,您将看到以下内容:

enter image description here

现在,如果单击Save file按钮,则会弹出一个对话框,您可以在其中选择保存文件的路径和名称。这将是这样的:

enter image description here

不幸的是,这不起作用。在上面的上一张图中,我在启动插件之前进行了显式调用library(shinyFiles)。如果我不这样做,Save按钮将无效。导入shinyFiles或使用::明确引用其功能将无法完成任务。这是因为当我启动插件时,包本身(myAddin)没有附加(这是在启动插件时调用RStudio执行的:myAddin:::myAddin())。

因此,我的问题是:在启动插件之前,如何在不明确附加包shinyFiles的情况下使按钮工作?

我希望我明白我的观点。如果您需要更多信息,请立即告诉我。 我对包装开发还是一个新手,所以请记住这一点。

1 个答案:

答案 0 :(得分:3)

经过一番调查,我发现这是shinyFilesfiled a bug report的错误。您可以阅读错误报告以获取详细信息。

至于临时解决方法,直到软件包作者正确修复:您可以在addResourcePath('sF', system.file('www', package='shinyFiles'))函数中添加myAddin()。基本上,问题是shinyFiles正在寻找它的JS和CSS文件相对于它只在包被攻击时创建的路径,但是因为包从未附加,所以该路径不会被创建,所以你可以使用与shinyFiles用来做同样的行。

编辑:我向软件包发出拉取请求以解决此问题,所以希望在几个小时/明天您将有一个可行的解决方案而无需执行任何操作

编辑2 :修复程序已合并。如果从github下载最新版本的shinyFiles,它应该可以正常工作