Спасибо, что разъяснили мой вопрос в комментариях. Думаю, теперь я понимаю, чего вы пытаетесь достичь.
Я думаю, что одна проблема, с которой вы можете столкнуться, заключается в том, что боковая панель также не будет прокручиваться вниз. Я не уверен, что это желательно.
Возможное решение:
Вы можете добавить заполнитель, который гарантирует, что ваш последний вывод модели будет наверху, если вы прокрутите вниз . Это может быть просто пустой div:
div(style="height: 850px;")
Это скорее черновик, так как мы должны сначала убедиться, что spe c полностью понят. Усовершенствования заключаются в том, чтобы масштабировать этот div до размера экрана пользователя.
Воспроизводимый пример:
library(shiny)
library(broom)
library(dplyr)
library(shinyjs)
library(shinydashboard)
header <- dashboardHeader(title = "My Dashboard")
js_code <- "$(document).on('shiny:value', function(event) {
// Scroll down after model update
if (event.target.id === 'model_record') {
window.scrollTo(0,document.body.scrollHeight);
}
});"
sidebar <- dashboardSidebar(
sidebarMenu(
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 = 20)
)
)
body <- dashboardBody(
tags$script(js_code),
htmlOutput("model_record"),
div(style="height: 850px;")
)
ui <- dashboardPage(header, sidebar, body)
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/>")
})
})
shinyApp(ui, server)