r闪亮地将元素动态添加到反应值

时间:2019-06-02 17:39:22

标签: r shiny

我正在尝试学习如何使用闪亮的模块来简化我的凌乱闪亮的应用程序。该应用程序当前使用如下名称列表读取多个数据集:

dataSetsToLoad <- c("set1name", "set2name", "etc")
for (i in 1:length(dataSetsToLoad) {
dt <- readRDS(paste0(dataSetsToLoad[i], ".RDS")
assign(dataSetsToLoad[i], dt)
}

这些最终出现在全球环境中,所有我的非模块化代码都可以访问。

按照here的代码模式,我想将以上内容修改为类似于以下内容的内容

stash = reactiveValues()
 for (i in 1:length(dataSetsToLoad) {
      stashVar <- paste0("stash$", dataSetsToLoad[i])
      dt <- readRDS(paste0(dataSetsToLoad[i], ".RDS")
      assign(stashVar, dt)
}

摘要问题是如何将dt与stashVar中动态创建的名称一起放入隐藏反应堆中。第二个问题是,是否有任何方法可以测试而不在闪亮的应用程序中实际运行它。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作。将数据帧存储在列表中,然后将其循环分配到reactiveValues()

dflist <- list(mtcars, airquality, mtcars)

library(shiny)

# Define UI for application that draws a histogram
ui <- fluidPage(

    # Application title
    titlePanel("Old Faithful Geyser Data"),

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            sliderInput("bins",
                        "Number of bins:",
                        min = 1,
                        max = 3,
                        value = 3)
        ),

        # Show a plot of the generated distribution
        mainPanel(
           plotOutput("distPlot")
        )
    )
)

# Define server logic required to draw a histogram
server <- function(input, output) {

    values <- reactiveValues()

    for(i in 1:length(dflist)) {
        values[[paste0("df_", i)]] <- dflist[[i]]
    }

    observeEvent(input$bins, {
        print(values$df_1)
        print(values$df_2)
        print(values$df_3)
    })


}

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