使用数据框时如何解决“ coerceValue”错误?

时间:2019-07-02 11:43:48

标签: r shiny dt

 shinyApp(
  ui = fluidPage(
    DTOutput('x1')
  ),
  server = function(input, output, session) {
    x = iris
    output$x1 = renderDT(x, selection = 'none', editable = list(target = 'row', disable = list(columns=c(1,3,4))))

    proxy = dataTableProxy('x1')

    observeEvent(input$x1_cell_edit, {
      info = input$x1_cell_edit
      str(info)
      i = info$row
      j = info$col
      v = info$value
      x[i, j] <<- DT::coerceValue(v, x[i, j])
      replaceData(proxy, x, resetPaging = FALSE)  # important
    })
  }
)

我收到以下警告:

Warning in DT::coerceValue(v, x[i, j]) :
  The data type is not supported: data.frame

Warning: Error in [[: attempt to select less than one element in integerOneIndex

如何确保coerceValue正在编辑并保存新输入?

1 个答案:

答案 0 :(得分:0)

一个简单的问题:您似乎在使用here中的大部分示例,但不是全部。有什么理由吗?您可以在此处使用下面的代码,它更简单:

library(shiny)
library(DT)
shinyApp(
    ui = fluidPage(
        DTOutput('x1')
    ),
    server = function(input, output, session) {
        x = iris
        output$x1 = renderDT(x, selection = 'none', editable = list(target = 'cell', disable = list(columns=c(1,3,4))))

        proxy = dataTableProxy('x1')

        observeEvent(input$x1_cell_edit, {
            info = input$x1_cell_edit
            str(info)
            x <<- editData(x, info)
            replaceData(proxy, x, resetPaging = FALSE)  # important
        })
    }
)

PS:Stéphane Laurent中提到的target =“ cell”。