【问题标题】:RStudio Addin: Gadget not working (Dependency issue)RStudio 插件:小工具不工作(依赖问题)
【发布时间】:2016-03-23 13:45:34
【问题描述】:

我的问题与包的开发有关。因此,一个最小的可重现示例意味着您也应该创建那个最小的包。我基本上是在尝试构建一个简单的 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

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

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

现在,如果您单击Save file 按钮,应该会弹出一个对话框,您可以在其中选择路径和名称来保存文件。这将如下所示:

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

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

我希望我的观点很清楚。如果您需要更多信息,请立即告诉我。 我对包开发还很陌生,所以请记住这一点。

【问题讨论】:

    标签: r shiny r-package


    【解决方案1】:

    经过一番调查,我发现这是shinyFiles 和我filed a bug report 的错误。您可以阅读错误报告以了解详细信息。

    至于在包作者正确修复之前的临时解决方法:您可以在 myAddin() 函数中添加 addResourcePath('sF', system.file('www', package='shinyFiles'))。基本上,问题在于 shinyFiles 正在寻找它的 JS 和 CSS 文件,该文件相对于它仅在包受到攻击时创建的路径,但由于包从未附加,因此不会创建该路径,因此您可以使用ShinyFiles 用于执行此操作的同一行。

    编辑:我向包提出了一个拉取请求来解决这个问题,所以希望在几个小时/明天你将有一个工作解决方案而无需做任何事情

    edit 2:修复已合并。如果您从 github 下载最新版本的 shinyFiles,它应该可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      相关资源
      最近更新 更多