RStudio和Shiny:用Reactive定义一个reactiveValues

时间:2017-03-13 10:00:22

标签: r shiny reactive-programming

我有一个根据用户输入构建的数据框,选择不同的过滤器。然后我想从这个自定义数据框创建一个条形图,用户可以单击该图以从图中排除条形图。我基本上遵循这个例子: https://gallery.shinyapps.io/106-plot-interaction-exclude/

然而,当我尝试用我的被动方法定义我的reactiveValues值时,我无法定义它并得到一个错误。我怀疑我不能用反应来定义反应值,这是对的吗?那我该怎么处理呢?我应该使用reactive而不是reactiveValues吗?

示例代码:

服务器

server <- function(input, output) {
  df <- reactive({
  input$input1
})

vals2 <- reactive({
   (df())
})
output$Id1 <- renderText({
   vals2()
})

vals <- reactiveValues()
vals$bla <- df()
}

UI

library(shiny)
ui <- fluidPage(
  fluidRow(
  column(width= 4,
       textInput(inputId = "input1", label = "Select number of rows", value = "10")
),
   column(width = 12,
       verbatimTextOutput(outputId = "Id1"),
       verbatimTextOutput(outputId = "Id2")
  )
 )
)

1 个答案:

答案 0 :(得分:2)

在函数开头创建您的reactiveValues,初始化为NULL

vals <- reactiveValues(bla = NULL)

然后,您可以从vals$bla内部写入observeEvent,例如按下按钮时。

您可以从reactiveValue中读取,例如以下列形式绘制图:

output$myPlot <- renderPlot( some function of values$bla )

编辑更新以添加我的评论,创建一个观察你的input1的observeEvent,当这个更改时,它将会在{}中的代码中执行,这将写入你的reactiveValue。

observeEvent(input$input1, {
    vals$bla <- input$input1    
})