我有一个闪亮的应用程序(作为软件包的一部分捆绑在一起),在其中,在服务器功能的开头,我创建了一堆反应式数据帧,这些数据帧随后在应用程序的其他部分中使用。
由于创建了很多数据框,我想创建一个简单的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可以将它们绑定在一起。
还有其他选择吗?
您可以使用global.R
文件设置数据。在global.R文件中创建的任何R对象都可分别对app.R文件或ui.R和server.R文件可用。 Take a look at how to modularize shiny apps.
编辑:如注释中所指出,可以使用local = TRUE
仅将对象加载到发光的环境中。