分配到包装中的全局发光环境

问题描述 投票:1回答:1

我有一个闪亮的应用程序(作为软件包的一部分捆绑在一起),在其中,在服务器功能的开头,我创建了一堆反应式数据帧,这些数据帧随后在应用程序的其他部分中使用。

由于创建了很多数据框,我想创建一个简单的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 '<<-' assignment的cran NOTE,通常,在cran程序包中进行全局分配是不好的做法。

因此,有什么方法可以创建一个可以像这样进行设置的功能,但又可以有助于闪亮和克兰包装?理想情况下,我想避免在list中返回所有内容,而且我没有找到一种在Shiny Modules框架中进行此工作的方法,因为没有相应的UI可以将它们绑定在一起。

还有其他选择吗?

r shiny
1个回答
0
投票

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

编辑:如注释中所指出,可以使用local = TRUE仅将对象加载到发光的环境中。

© www.soinside.com 2019 - 2024. All rights reserved.