Я использую DT, чтобы позволить пользователям отображать и редактировать таблицы в приложении Shiny. Я пытаюсь преобразовать свой код, чтобы использовать вместо него rhandsontable, чтобы обеспечить большую гибкость редактирования для пользователя (код DT в настоящее время закомментирован).
Однако, когда я заменяю renderDT и DTOutput на соответствующий rhandsontable функции я получаю сообщение об ошибке "недопустимый тип индекса" список "". Я предполагаю, что это связано с тем, что мой выбор таблицы происходит в форме списка. Есть ли способ, позволяющий пользователю выбрать таблицу из раскрывающегося списка, а затем разрешить редактировать эту выбранную таблицу с функциональностью rhandsontable?
Спасибо!
library(shiny)
library(DT)
library(rhandsontable)
df1 <- data.frame(a = c('a','b','c','d','e'),
b = round(rnorm(5, 0,1),2),
stringsAsFactors = F)
df2 <- data.frame(a = c('a','b','c','d','e'),
b = round(rnorm(5, 1,1.5),2),
stringsAsFactors = F)
ui <- fluidPage(
titlePanel("example"),
sidebarLayout(
sidebarPanel(
selectInput(inputId = "df",
label = "Choose a table:",
choices = c("df1",
"df2")),
textOutput('df1avg'),
textOutput('df2avg'),
textOutput('df12')
),
mainPanel(
actionButton("reset", "Reset"),
#DTOutput("df")
rHandsontableOutput('df')
)
)
)
server <- function(input, output) {
rv <- reactiveValues(tables = list("df1" = df1, "df2" = df2))
dfInput <- reactive({
rv$tables[[input$df]]
})
observeEvent(input[["df_cell_edit"]], {
cell <- input[["df_cell_edit"]]
rv$tables[[input$df]][cell$row, cell$col] <- cell$value
})
observeEvent(input$reset, {
rv$tables <- list("df1" = df1, "df2" = df2)
})
output$df1avg <- renderText(mean(as.numeric(rv$tables[["df1"]][,2])))
output$df2avg <- renderText(mean(as.numeric(rv$tables[["df2"]][,2])))
output$df12 <- renderText(mean(as.numeric(rv$tables[["df1"]][,2]))*mean(as.numeric(rv$tables[["df2"]][,2])))
# output$df <- renderDT(dfInput(), editable = TRUE,
# options = list(lengthChange = FALSE))
output$df <- renderRHandsontable({
rhandsontable(dfInput())
})
}
shinyApp(ui = ui, server = server)