在一个闪亮的应用程序中,有没有办法保持旧的无功输出并在应用程序中显示它以及新的无功输出?举一个例子:说我想显示线性模型的汇总表,我逐渐添加更多变量。我目前有一个checkboxGroupInput
面板,我使用它选择要包含在模型中的解释变量,然后我渲染一个表,其中包含使用所选变量估计的模型的摘要。现在当我决定使用一组不同的变量时,我想保持显示原始汇总表,但也要在旧汇总表下面添加新汇总表。如果可能的话,我想显示所有过去的反应表实例,即应用程序中显示的表数应该等于我决定在整个应用程序中使用的不同解释变量集的数量。目前,该表格在htmlOutput
部分ui
部分stargazer
和renderText
部分server
处呈现{{1}}。
答案 0 :(得分:1)
这是一种有效的方法。它使用reactiveValues
对象,每次单击" Fit Model"按钮,它将新模型附加到列表的末尾。数字输入控制在屏幕上显示的模型数量。这会保留您在会话中适合的每个模型。
我没有做stargazer
表,因为我并不熟悉它。但你应该能够很容易地适应这一点。
library(shiny)
library(broom)
shinyApp(
ui =
shinyUI(
fluidPage(
sidebarLayout(
sidebarPanel(
checkboxGroupInput(inputId = "indep",
label = "Independent Variables",
choices = names(mtcars)[-1],
selected = NULL),
actionButton(inputId = "fit_model",
label = "Fit Model"),
numericInput(inputId = "model_to_show",
label = "Show N most recent models",
value = 2)
),
mainPanel(
htmlOutput("model_record")
)
)
)
),
server =
shinyServer(function(input, output, session){
Model <- reactiveValues(
Record = list()
)
observeEvent(
input[["fit_model"]],
{
fit <-
lm(mpg ~ .,
data = mtcars[c("mpg", input[["indep"]])])
Model$Record <- c(Model$Record, list(fit))
}
)
output$model_record <-
renderText({
tail(Model$Record, input[["model_to_show"]]) %>%
lapply(tidy) %>%
lapply(knitr::kable,
format = "html") %>%
lapply(as.character) %>%
unlist() %>%
paste0(collapse = "<br/><br/>")
})
})
)