我当然正在开发一个使用反应值的闪亮应用。但是,我想探索使用reactiveValues
来测试我对这个概念的理解。我的设计是创建一个dt
容器的反应值,例如data
,cols
,rows
;这样我就可以将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
中使用变量有什么问题。
答案 0 :(得分:1)
当您上传文件时,指令dt$data <- f
会触发使用renderDataTable
的{{1}}。这在dt$data
被调用之前发生,因此dt$cols <- input$columns
为NULL并且dt$cols
引发错误。
您可以尝试dt$data[dt$cols]
:
isolate