【发布时间】: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 '<<-' 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 -
是的,这实际上是一个非常好的解决方案!随意贡献它作为一个答案,所以我可以接受它