【问题标题】:Assign to global shiny environment in package分配给包中的全局闪亮环境
【发布时间】:2020-07-23 00:31:46
【问题描述】:

我有一个闪亮的应用程序(捆绑为包的一部分),在服务器函数的开头,我创建了一堆反应性数据帧,这些数据帧稍后会在应用程序的其他部分中使用。

由于创建了很多数据帧,我想制作一个简单的setup_data() 函数,可以在开始时调用,以帮助保持应用程序代码的整洁。但是,由于 dfs 是在函数内部创建的,我需要使用 <<-assign 来确保它们在 Shiny 的服务器环境中可用。

library(shiny)

setup_data <- function(){
  reactiveDat1 <<- shiny::reactiveValues()
  reactiveDat1$mydf <<- data.frame(x = 1, y = 2)

  reactiveDat2 <<- shiny::reactiveValues()
  reactiveDat2$mydf <<- data.frame(x = 5, y = 10)
}

ui <- fluidPage(

   titlePanel(""),

   sidebarLayout(
      sidebarPanel(
      ),

      mainPanel(
      )
   )
)

server <- function(input, output) {

  setup_data()

  # rest of app goes here....
}

# Run the application 
shinyApp(ui = ui, server = server)

这样做会生成no visible binding for '&lt;&lt;-' assignment 的 cran NOTE,通常在 cran 包中进行全局分配是不好的做法。

因此,有没有办法我可以创建一个这样的设置函数,但以一种有利于闪亮和 cran 包的方式?理想情况下,我希望避免在 list 中返回所有内容,并且我还没有找到一种方法可以在 Shiny Modules 框架中完成这项工作,因为没有相应的 UI 可以将它们绑定到。

还有其他选择吗?

【问题讨论】:

  • 是否可以使用global.R-file 设置数据? “在 global.R 文件中创建的任何 R 对象都可用于 app.R 文件或 ui.R 和 server.R 文件!”更多信息:shiny.rstudio.com/articles/modules.html
  • 是的,这实际上是一个非常好的解决方案!随意贡献它作为一个答案,所以我可以接受它

标签: r shiny


【解决方案1】:

您可以使用global.R 文件设置数据。在 global.R 文件中创建的任何 R 对象都可用于 app.R 文件或 ui.R 和 server.R 文件。 Take a look at how to modularize shiny apps.

编辑:正如 cmets 中所指出的,您可以使用 local = TRUE 仅将对象加载到闪亮的环境中。

【讨论】:

  • 使用 global.R 似乎将东西加载到 R 全局环境中(然后可以用于闪亮)。你知道是否可以将它们加载到 Shinys 环境中?
  • 啊,local = TRUE 做到了
  • 我将编辑我的答案以包含该信息,因为我不知道!
猜你喜欢
  • 2019-07-16
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
相关资源
最近更新 更多