在reactiveValues函数中使用反应输出时.getReactiveEnvironment()$currentContext()中出错

在reactiveValues函数中使用反应输出时.getReactiveEnvironment()$currentContext()中出错,r,shiny,shiny-reactivity,R,Shiny,Shiny Reactivity,我试图得到一个反应值,它取决于一个反应值。在实际代码中(这是一个非常简化的版本),我以交互方式加载数据集。按下按钮(prevBtn/nextBtn)时会发生变化。我需要知道数据集中的行数,用它来绘制不同颜色的数据点 问题:为什么我不能在reactiveValues函数中使用reactive ro() 理解:为什么错误会说“您试图做的事情只能在反应式表达式或观察者内部完成。”,尽管ro()在反应式上下文中使用 错误肯定是由于vals()引起的,我已经检查了其余部分 守则: library(shin

我试图得到一个反应值,它取决于一个反应值。在实际代码中(这是一个非常简化的版本),我以交互方式加载数据集。按下按钮(prevBtn/nextBtn)时会发生变化。我需要知道数据集中的行数,用它来绘制不同颜色的数据点

问题:为什么我不能在reactiveValues函数中使用reactive ro()

理解:为什么错误会说“
您试图做的事情只能在反应式表达式或观察者内部完成。
”,尽管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)
我想你想要

vals <- reactiveValues(needThisForLater = reactive(30 * ro()))
vals
vals <- reactiveValues(needThisForLater = reactive(30 * ro()))