reactiveValues不能用于呈现输出

时间:2017-05-13 00:19:00

标签: r shiny

我当然正在开发一个使用反应值的闪亮应用。但是,我想探索使用reactiveValues来测试我对这个概念的理解。我的设计是创建一个dt容器的反应值,例如datacolsrows;这样我就可以将input$file上传的数据保存到dt$data;我还要使用checkboxGroupInput来显示数据的列,这些列保存为dt$cols,并允许用户选择列,然后呈现dt$data[dt$cols]的数据表。这是我使用的代码:

dt <- reactiveValues()
observeEvent(input$uploadbutton, {

       file <- input$file
       req(input$file)
       f <- read.csv(file$datapath, header = TRUE)
       dt$data <- f

       # get the col names of the dataset and assign them to a list
       cols <- mapply(list, names(dt$data))

       # update columns ui under columnscontrol div
       updateCheckboxGroupInput(session, "columns", "Select Columns:", choices = cols, selected = cols)
})

observeEvent(input$columns, { dt$cols <- input$columns  })

output$datatbl <- DT::renderDataTable(
   dt$data[dt$cols], rownames = FALSE,
   # column filter on the top
   filter = 'top', server = TRUE,
   # autoWidth
   options = list(autoWidth = TRUE)
)

代码无法正常工作,我被错误的&#34;未定义的列&#34;调用dt$data[dt$cols]时但是,如果我只使用无效值dt2 <- eventReactive(input$columns, { f <- dt$data[input$columns], f }),然后在dt2()中调用renderDataTable(),则上述工作正常。我想知道在reactiveValues中使用变量有什么问题。

1 个答案:

答案 0 :(得分:1)

当您上传文件时,指令dt$data <- f会触发使用renderDataTable的{​​{1}}。这在dt$data被调用之前发生,因此dt$cols <- input$columns为NULL并且dt$cols引发错误。

您可以尝试dt$data[dt$cols]

isolate