【问题标题】:How to use shiny app as a target in drake如何在德雷克中使用闪亮的应用程序作为目标
【发布时间】:2020-04-22 07:03:44
【问题描述】:

如何将上一个目标 (df) 传递给我在下一个命令 shinyApp 中使用的 uiserver 函数。我的计划是这样的:

plan <- drake_plan(
  df = faithful,
  app = shinyApp(ui, server)
)

uiserver 是从 shiny tutorial 复制而来的。只有一个区别 - 我将faithful 更改为df(上一个目标中的数据)。 现在我收到一个错误:

Warning: Error in $: object of type 'closure' is not subsettable
  [No stack trace available]

如何解决这个问题?最佳做法是什么?

【问题讨论】:

    标签: r shiny drake-r-package


    【解决方案1】:

    drake 目标应该返回可以使用saveRDS() 存储的固定数据对象(如果您使用的是specialized formats,则可以使用其他类型的文件)。我建议看看https://books.ropensci.org/drake/plans.html#how-to-choose-good-targets。将 Shiny 应用的运行实例定义为目标时存在问题。

    1. 只要应用程序还在运行,make() 就永远不会结束。
    2. shinyApp() 的返回值保存为数据对象实际上没有任何意义。这并不是目标的真正用途。目标的目的是可重现地缓存长时间计算的结果,因此您无需重新运行它,除非某些上游代码或数据发生更改。

    相反,我认为应用目标的目的应该是部署到像https://shinyapps.io 这样的网站。要在df 更改时更新应用程序,请务必在命令中提及df 作为符号,以便drake 的静态代码分析器可以识别它。此外,使用 file_in() 将 Shiny 应用脚本声明为依赖项,以便 drake 在代码更改时自动重新部署应用。

    library(drake)
    
    plan <- drake_plan(
      df = faithful,
      deployment = custom_deployment_function(file_in("app.R"), df)
    )
    
    custom_deployment_function <- function(file, ...) {
      rsconnect::deployApp(
        appFiles = file,
        appName = "your_name",
        forceUpdate = TRUE
      )
    }
    

    另外,请务必检查依赖关系图,以便您知道 drake 将以正确的顺序运行正确的目标。

    vis_drake_graph(plan)
    

    在您之前的计划中,应用程序的命令没有提到符号 df,因此 drake 不知道它需要先运行一个。

    plan <- drake_plan(
      df = faithful,
      app = shinyApp(ui, server)
    )
    vis_drake_graph(plan)
    

    【讨论】:

    • 非常感谢德雷克,我不清楚最初的查询是否已完全解决,我也不在那里。当我将 custom_deployment_function 与这个忠实的应用程序 (shiny.rstudio.com/articles/basics.html) 一起使用时,只将忠实的 $waiting 更改为 df$waiting,但仍然得到“关闭不是子集”。该应用程序在德雷克之外完美运行,但似乎德雷克计划中的某些数据和/或包可能不会传递到 Shiny。
    • 也许将 df 更改为与基本函数不冲突的名称?如果这不起作用或没有生成有用的错误消息,我认为这将更容易在新帖子中通过端到端可重现示例进行故障排除。
    • 我无法到达那里更改 df 所以发布一个新帖子。
    • 谢谢。你会评论链接吗?找不到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    相关资源
    最近更新 更多