r - 如何修复可编辑的 DT::datatable 抛出:“split.default 中的错误:第一个参数必须是向量”
问题描述
我正在尝试制作一个接受数据框并从中生成可编辑数据表的模块。这一直有效,直到我通过进行以下更改使模块能够接受多个编辑:
editTable <- reactive({
datatable(
reactives$input,
#editable = T #PREVIOUS (working fine)
editable = list(target = "all"), #NEW (problem-causing)
rownames = F
)
})
包含标记的代码#NEW
后,单击labelDo
(在本例中为“编辑”)会导致应用程序崩溃并显示以下错误消息:
Warning: Error in split.default: first argument must be a vector
我能找到的最接近这个问题的问题就在这里。该用户的问题是相同的,但我的问题并没有通过将rownames = FALSE
其放入datatable()
上面的代码段中来解决(据称他们的问题是)。
请继续运行以下模块和应用程序,并尝试编辑表中的数字之一。单击“编辑”,您将获得相同的结果。
模块:
editrUI <- function(id, labelDo, labelUndo) {
ns <- NS(id)
tagList(
dataTableOutput(ns("out")),
actionButton(
inputId = ns("do"),
label = labelDo
),
actionButton(
inputId = ns("undo"),
label = labelUndo
)
)
}
editrServer <- function(id, dataFrame) {
moduleServer(
id,
function(input, output, session){
reactives <- reactiveValues()
reactives$input <- NULL
observe({
reactives$input <- dataFrame
})
editTable <- reactive({
datatable(
reactives$input,
#editable = T #old
editable = list(target = "all"), #new
rownames = F
)
})
output$out <- renderDataTable(
editTable()
)
observeEvent(input$do , {
reactives$input <<- editData(reactives$input, input$out_cell_edit, rownames = F)
})
observeEvent(input$undo , {
reactives$input <- dataFrame
})
return(reactive({reactives$input}))
}
)
}
应用程序:
library(shiny)
source(
#source of module
)
a <- 1:5
df <- tibble(a, a*2)
ui <- fluidPage(
editrUI(id = "id", labelDo = "Edit", labelUndo = "Undo")
)
server <- function(input, output) {
editrServer(id = "id", dataFrame = df)
}
# Run the application
shinyApp(ui = ui, server = server)
解决方案
似乎此错误是在input$out_cell_edit
为 NULL 时引起的(未编辑任何单元格)。
您可以修复它,req(input$out_cell_edit)
以防万一input$out_cell_edit
为 NULL 时取消该事件。
此外,您不需要使用<<-
分配给反应值。
observeEvent(input$do , {
req(input$out_cell_edit)
reactives$input <- editData(reactives$input, input$out_cell_edit, rownames = F)
})
推荐阅读
- javascript - 复选框组选择的动态限制
- angular - Angular Virtual Scroll 未检测到为 Reactive FormArray 添加项目的更改
- php - 限制用户访问网页 + 用户名/密码错误提示
- asp.net-core - ASP.NET CORE 中的@Ajax.ActionLink
- amazon-web-services - 我是否必须设置 2 个 EC2 实例才能使用 AWS ACM?
- java - 如何检索“总计”的值
- python - 具有 Python PuLP 性能问题的 MILP 模型 - 求解器非常慢
- android - 如何实现固定数量项目的水平滚动?
- excel - 消息框和声音同时播放 - VBA
- c# - 如何修复 CA1000 不要在泛型类型上声明静态成员