Я получаю сообщение об ошибке при использовании блестящего dq_render_handsontable
, что, по-моему, является ошибкой пакета dq_shiny. Буду признателен, если кто-нибудь может знать какую-либо работу вокруг. Я пытаюсь интерактивно обновить таблицу с помощью кнопки действия («Создать» в приведенном ниже коде). Таблицы, между которыми я пытаюсь переключаться, имеют разное количество столбцов. Все работает вплоть до отображения новой таблицы, то есть, когда я нажимаю «Создать», я вижу новую таблицу с дополнительными столбцами. НО проблема в том, что, как только я пытаюсь отредактировать ячейки фрейма данных с большим количеством столбцов после редактирования первого с меньшим количеством столбцов, появляется следующая ошибка:
Warning: Error in [<-.data.frame: new columns would leave holes after existing columns
Я думаю, что это, безусловно, ошибкаdq_render_handsontable
, который не распознает новые столбцы, добавленные в handsontable
. Кто-нибудь знает обходной путь? Может быть, обновить таблицу, прежде чем показывать новый фрейм данных с несколькими столбцами?
Я прикрепляю кусок кода, чтобы воспроизвести ошибку:
library(shiny)
library(rhandsontable)
library(dqshiny)
library(rlang)
ui = fluidPage(
dq_handsontable_output("InputTable", 9)
,
# actionButton("render", "Render HoT"),
actionButton("simulationInput_2", "Generate"),
fluidRow(id="bigRow", class="hidden",
style="height:100vh;background:#ff8f00;")
)
server = function(input, output) {
hw <- c("Hello", "my", "funny", "world!")
data1 <- data.frame(A=hw, B=hw[c(2,3,4,1)], C=1:4, D=Sys.Date() - 0:3,
A2=hw, B2=hw[c(2,3,4,1)], C2=1:4, D2=Sys.Date() - 1:4,
stringsAsFactors = FALSE)
hw <- c("Hello", "my", "funny", "world!")
data2 <- data.frame(A=hw, B=hw[c(2,3,4,1)], C=1:4, D=Sys.Date() - 0:3,
# A2=NA, B2=NA, C2=NA, D2=NA,
stringsAsFactors = FALSE)
cont = 0
observeEvent(input$simulationInput_2, {
cont <<- cont+1
print(cont)
if(mod(cont,2)==0){
data <- data2
}else{
data <- data1
}
renderInputTable(data)
render_hot("InputTable")
})
renderInputTable <- function(data){
dq_render_handsontable(
"InputTable",
data, #"rand",
# filters = F, #c("S", "T", "R", "R"),
filters = rep(NA, ncol(data)),
table_param = list(rowHeaders = NULL, selectCallback = TRUE))
}
observeEvent(input$random_select, toggle("bigRow"))
observeEvent(input$render, render_hot("InputTable"))
}
shinyApp(ui, server)