Я пытаюсь получить значение реактивного, которое зависит от реактивного. В реальном коде (это очень упрощенная версия) я загружаю набор данных в интерактивном режиме. Изменяется при нажатии кнопок (prevBtn / nextBtn). Мне нужно знать количество строк в наборе данных, используя это для построения точек данных разными цветами.
Вопрос: почему я не могу использовать реактивный ro () в функции реактивных значений?
Для понимания: почему ошибка говорит "You tried to do something that can only be done from inside a reactive expression or observer.
", хотя ro () используется внутри реактивного контекста.
Ошибка определенно связана с vals (), остальное я уже проверил.
код:
library(shiny)
datasets <- list(mtcars, iris, PlantGrowth)
ui <- fluidPage(
mainPanel(
titlePanel("Simplified example"),
tableOutput("cars"),
actionButton("prevBtn", icon = icon("arrow-left"), ""),
actionButton("nextBtn", icon = icon("arrow-right"), ""),
verbatimTextOutput("rows")
)
)
server <- function(input, output) {
output$cars <- renderTable({
head(dat())
})
dat <- reactive({
if (is.null(rv$nr)) {
d <- mtcars
}
else{
d <- datasets[[rv$nr]]
}
})
rv <- reactiveValues(nr = 1)
set_nr <- function(direction) {
rv$nr <- rv$nr + direction
}
observeEvent(input$nextBtn, {
set_nr(1)
})
observeEvent(input$prevBtn, {
set_nr(-1)
})
ro <- reactive({
nrow(dat())
})
output$rows <- renderPrint({
print(paste(as.character(ro()), "rows"))
})
vals <- reactiveValues(needThisForLater = 30 * ro())
}
shinyApp(ui = ui, server = server)
Ошибка в .getReactiveEnvironment()$currentContext()
:
Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)