我构建了一个R-shine应用程序,允许用户手动将数据输入到一个RHandsonTable中,或者上传一个csv文件.独立地,这些都很好.但是,如果用户先上传一个文件,然后try 手动编辑表格,我就无法让更改生效.
如果你运行下面的例子,你会看到如果你选中了一些框并点击"Go"按钮,那么布尔值就会正确地显示在输出表中.类似地,如果你上传一个简单的csv文件(下面也是示例文件)并点击"Go",那么布尔值就会正确地显示在输出表中.但是,如果您上传文件,然后try 选中或取消选中这些框,它们会立即恢复到上传的值,并且只会显示上传的值,直到应用程序重新启动.有什么 idea ,如何重新编码,以便它可以处理上传,然后允许用户编辑上传?
MRE:
library(shiny)
library(rhandsontable)
library(shinythemes)
library(data.table)
ui <- fluidPage(
actionButton("go", "Go"),
fileInput('file',label=''),
rHandsontableOutput('table1'),
tableOutput('table2')
)
DF1 <- data.frame(col1 = rep(F,3),col2 = rep(F,3))
server <- function(input, output, session) {
values <- reactiveValues()
observe({
if (!is.null(input$table1)) {
DF1 <- hot_to_r(input$table1)
} else {
if (is.null(values$DF1))
DF1 <- DF1
else
DF1 <- values$DF1
}
values$DF1 <- DF1
})
output$table1 <- renderRHandsontable({
if (!is.null(input$file)){
inputfile <- fread(input$file$datapath)
values$DF1 <- inputfile
rhandsontable(values$DF1)
} else {
if (!is.null(values$DF1)) rhandsontable(values$DF1)
}
})
observeEvent(input$go,{values$DF2<-values$DF1})
output$table2 <- renderTable(values$DF2)
}
shinyApp(ui, server)
对于一个简单的文件上传,像这样的CSV证明了这一点:
COL1,COL2
对,错
假的,真的
对,错