我读了一个csv文件,将其作为应用程序中的一个表,对于某一列,我想不时地更新单元格值,我想通过提供一个下拉列表供用户选择时间来控制该值他们需要更新值,我正在使用dt程序包,这非常好,但是似乎此功能不容易拥有,我在网上搜索了很多内容,却没有找到出路,请帮忙,可以看到这个吗?
谢谢。
我有一个带有按钮的解决方案,但下拉菜单只能解决一半:
我可以显示下拉菜单,但不能选择下拉菜单。我已将其包含在内,以防其他人可以完成它。
library(shiny)
library(DT)
shinyApp(
#UI
ui <- fluidPage(
DT::dataTableOutput('my_datatable'),
),
#Server
server <- function(input, output, session) {
#Function to create buttons
shinyInput <- function(FUN, len, id, ...) {
inputs <- character(len)
for (i in seq_len(len)) {
inputs[i] <- as.character(FUN(paste0(id, i), ...))
}
inputs
}
#Add buttons to the mtcars dataframe
mtcars_btn <- reactiveValues(
data = data.frame(
mtcars[, 1:2],
btn_delete = shinyInput(actionButton, nrow(mtcars), 'button_', label = "Delete", onclick = 'Shiny.setInputValue(\"btn_delete_click\", this.id, {priority: "event"})'),
btn_review = shinyInput(actionButton, nrow(mtcars), 'button_', label = "Review", onclick = 'Shiny.setInputValue(\"btn_review_click\", this.id, {priority: "event"})'),
btn_keep = shinyInput(actionButton, nrow(mtcars), 'button_', label = "Keep", onclick = 'Shiny.setInputValue(\"btn_keep_click\", this.id, {priority: "event"})'),
drp_select = shinyInput(selectInput, nrow(mtcars), 'button_', label = "", width = 100, choices = c("Keep", "Delete", "Review")),# onChange = ''),
reportfinalrule = 'Keep',
stringsAsFactors = FALSE
)
)
#Output datatable
output$my_datatable <- DT::renderDataTable(
DT::datatable(mtcars_btn$data, escape = FALSE, selection = 'none', options = list(searching = FALSE, ordering = FALSE))
)
#Observe delete button being clicked
observeEvent(input$btn_delete_click, {
mtcars_btn$data[as.numeric(strsplit(input$btn_delete_click, "_")[[1]][2]),]$reportfinalrule <- 'Delete'
})
#Observe review button being clicked
observeEvent(input$btn_review_click, {
mtcars_btn$data[as.numeric(strsplit(input$btn_review_click, "_")[[1]][2]),]$reportfinalrule <- 'Review'
})
#Observe keep button being clicked
observeEvent(input$btn_keep_click, {
mtcars_btn$data[as.numeric(strsplit(input$btn_keep_click, "_")[[1]][2]),]$reportfinalrule <- 'Keep'
})
}
)