在 reactiveValues 函数中使用反应输出时 .getReactiveEnvironment()$currentContext() 出错
Error in .getReactiveEnvironment()$currentContext() while using reactive output in reactiveValues function
我试图获得一个依赖于反应的反应值。在实际代码中(这是一个非常简化的版本),我以交互方式加载数据集。按下按钮时它会改变 (prevBtn/nextBtn)。我需要知道数据集中的行数,用它来绘制不同颜色的数据点。
问题:为什么我不能在 reactiveValues 函数中使用 reactive 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.)
我想你想要
vals <- reactiveValues(needThisForLater = reactive(30 * ro()))
并非 reactiveValues
列表中的所有内容都被假定为反应式的。它也是存储常量值的好地方。因此,由于它试图评估您在 运行 时间传递的参数并且您没有在反应环境中调用该行,因此您会收到该错误。因此,只需将其包装在对 reactive()
的调用中,您就可以为 ro()
的调用提供一个响应式环境。
我试图获得一个依赖于反应的反应值。在实际代码中(这是一个非常简化的版本),我以交互方式加载数据集。按下按钮时它会改变 (prevBtn/nextBtn)。我需要知道数据集中的行数,用它来绘制不同颜色的数据点。
问题:为什么我不能在 reactiveValues 函数中使用 reactive 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.)
我想你想要
vals <- reactiveValues(needThisForLater = reactive(30 * ro()))
并非 reactiveValues
列表中的所有内容都被假定为反应式的。它也是存储常量值的好地方。因此,由于它试图评估您在 运行 时间传递的参数并且您没有在反应环境中调用该行,因此您会收到该错误。因此,只需将其包装在对 reactive()
的调用中,您就可以为 ro()
的调用提供一个响应式环境。