r语言 - 为什么 reactive({ }) 不依赖于不断变化的输入?



在下面的 Shiny 应用程序代码中,我希望当用户单击数据表中的新行时执行打印行。当我这样做时,文本输出会按预期通过 input$table_rows_selected 更新所选行。但是为什么更改<-反应式({ })不依赖于对input$table_rows_selected的更改并触发打印消息?

我看到它适用于 observe({}),但最终我想使用一个在不同位置响应返回的值(例如这里的 return 和 return2)。

library(shiny)
library(DT)
ui <- fluidPage(
DT::DTOutput("table"),

textOutput("selected"),

textOutput("return"),

textOutput("return2")
)
server <- function(input, output) {
output$table <- DT::renderDataTable({
data.frame(a = 1:3, b = 4:6)
}, selection = 'single')


output$selected <- renderText({
input$table_rows_selected
})

change <- reactive({
input$table_rows_selected
print("it changed!")
"return"
})

output$return <- renderText({
isolate(change())
})

output$return2 <- renderText({
paste0(isolate(change()), "_2")
})


}
# Run the application 
shinyApp(ui = ui, server = server)

您的代码有 2 个问题:

  • reactive只是一个函数,因此它的返回值是reactive中生成的最后一个值 ->你需要把input$table_rows_selected放在最后
  • isolate(change())意味着reactives不依赖于input$table_rows_selected->删除isolate
library(shiny)
library(DT)
ui <- fluidPage(

DT::DTOutput("table"),

textOutput("selected"),

textOutput("return"),

textOutput("return2")

)
server <- function(input, output) {

output$table <- DT::renderDataTable({
data.frame(a = 1:3, b = 4:6)
}, selection = 'single')


output$selected <- renderText({
input$table_rows_selected
})

change <- reactive({
print("it changed!")
input$table_rows_selected
})

output$return <- renderText({
change()
})

output$return2 <- renderText({
paste0(change(), "_2")
})


}
# Run the application 
shinyApp(ui = ui, server = server)

最新更新