我正在尝试创建一个Shiny应用程序,该应用程序允许用户编辑数据表,从而保存编辑内容。这是一个最小的示例:
library(shiny)
library(DT)
ui <- fluidPage(
DT::DTOutput('df')
)
server <- function(session, input, output){
df <- data.frame(x = factor(c("A", "B", "C"), levels = c("A", "B", "C")))
output$df <- DT::renderDT(df,
editable = T)
proxy <- dataTableProxy("df")
observeEvent(input$df_cell_edit, {
info <- input$df_cell_edit
str(info)
i <- info$row
j <- info$col
v <- info$value
df[i, j] <<- DT:::coerceValue(v, df[i, j])
replaceData(proxy, df, resetPaging = FALSE)
})
}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)
这使我可以编辑内联的值x,但是由于这x是一个因素,因此我想限制用户能够输入的值。理想情况下,我希望使用下拉菜单来完成此操作。使用DT :: datatable和Shiny可以实现此功能吗?
注意:我知道该rhandsontable软件包,但是,如果可能的话,我宁愿使用DT。