R语言 “〈-中的错误:编辑数据框中的单元格时,赋值“的左侧无效(NULL)”

aurhwmvo  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(143)

其目标是创建一个闪亮的应用程序来记录野外数据。观察者记录每个个体的物种名称,性别和大小(这里限制为3个选择)。更新按钮,创建一个 Dataframe 的一行,这是绑定到一个React表。该表是显示在应用程序上,以检查潜在的输入错误。此表可编辑,以便观察者在发现错误时直接将数据更正到表中。
问题是,当我更新一个新条目时,表被编辑,版本消失,旧值又回来了,所以我添加了一个observeEvent来更改dataframe中的值。不幸的是,我得到:“〈-中的错误:invalid(NULL)left side of assignment”.如果我用完全相同的值替换该值,它不会返回错误,但如果我更改它,则会出现错误消息,例如在sexe列中将“M”替换为“F”。

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput(inputId = "sp", label = "sp", choices = c("espece1", "espece2")),
      radioGroupButtons(inputId = "sexe", label = "sexe", choices = c("M", "F"), status = "custom-class"),
      radioGroupButtons(inputId = "size", label = "size", choices = c("30", "20", "10"), status = "custom-class"),
      actionButton("update", "Update Table")
    ),
    mainPanel(
      dataTableOutput("table1")
    )
  )
)

server <- function(input, output, session) {
  mydata <- reactiveVal(data.frame(sp = character(),
                                  sexe = character(),
                                  size = character(),
                                  stringsAsFactors = FALSE))
  
  observeEvent(input$update, {
    to_add <- data.frame(sp = input$sp,
                         sexe = input$sexe,
                         size = input$size)
    mydata(rbind(mydata(), to_add))
  })
  
  output$table1 <- DT::renderDataTable({
    datatable(mydata(), editable = "cell",
              options = list(pageLength = 50,
                             paging = FALSE))
  })
 
observeEvent(input$table1_cell_edit, {
    info <- input$table1_cell_edit
    row <- info$row
    col <- info$col
    value <- info$value
 
    mydata()[row,col] <- value
  })

}

shinyApp(ui, server)

以下是我的一些尝试:

  • 在info$row和info$col处添加+1,即使rowname = TRUE,我也会得到相同的错误。
  • mydata()\[row,col\] \<\<- isolate(DT::coerceValue(value, mydata()\[row,col\]))仍然是相同的错误。
  • 将我的响应式 Dataframe 转换为我得到的非响应式 Dataframe :"Error in \<-: object of type 'closure' is not subsettable".提前感谢您的帮助
vq8itlhq

vq8itlhq1#

要获得reactiveVal ue的值,比如reacval,你必须执行val <- reacval()。要更改它,你必须执行reacval(newval)。所以在这里你可以这样做:

dat <- mydata()
dat[row, col] <- value
mydata(dat)

相关问题