我想要创建一个表,该表将接受selectizeInput和手动输入的值。然后出口到CVS。我已经准备好了表,但是当我尝试导出(单击"CVS")时,它不会接受手动输入所做的更改。下面是一个例子。如何使csv导出同时采用selectizeInput和手动输入?我还觉得我的代码有点多余。是否有一种创建表的简化方法?谢谢!
library(shiny)
library(shinydashboard)
library(DT)
ui <- dashboardPage(
dashboardHeader(title = "test"),
dashboardSidebar(),
dashboardBody(shiny::selectizeInput(inputId = "apple_lbs_filter",
label = "Apple lbs",
choices = c(1:10)),
shiny::selectizeInput(inputId = "cherry_lbs_filter",
label = "Cherry lbs",
choices = c(1:10)),
shiny::selectizeInput(inputId = "pineapple_lbs_filter",
label = "Pineapple lbs",
choices = c(1:10)),
shiny::selectizeInput(inputId = "pear_lbs_filter",
label = "Pear lbs",
choices = c(1:10)),
DT::DTOutput("fruit"),
shiny::actionButton(inputId = "update_lbs",label = "Update lbs"),
shiny::downloadButton(outputId = "export",label = "CSV"))
)
server <- function(input, output, session) {
fruit_df <- shiny::reactiveValues()
fruit_df$df <- data.frame(fruit_name = c("apple","cherry","pineapple","pear"),
fruit_lbs = c(2,5,6,3))
output$fruit <- DT::renderDT({
DT::datatable(fruit_df$df,editable = TRUE)
})
lbs_newentry <- shiny::observe({
if(input$update_lbs > 0) {
lbs_newline <- shiny::isolate(c(
input$apple_lbs_filter,
input$cherry_lbs_filter,
input$pineapple_lbs_filter,
input$pear_lbs_filter
))
shiny::isolate(fruit_df$df <- cbind(fruit_name = c("apple",
"cherry",
"pineapple",
"pear"),
fruit_lbs = lbs_newline))
}
})
output[["export"]] <- shiny::downloadHandler(
filename = function(){paste("fruit",Sys.Date(),".csv")},
content = function(file){
write.csv(fruit_df$df,file,row.names = FALSE)
}
)
}
shinyApp(ui, server)发布于 2022-07-06 17:45:54
这只是一个部分的答案,因为我已经删除了selectizeInput(),尝试根据您的请求压缩代码以简化。表的编辑可以直接在表中完成。此外,我还添加了按钮扩展,以便作为csv直接下载表。希望这能帮上忙。
library(shiny)
library(shinydashboard)
library(DT)
ui <- dashboardPage(
dashboardHeader(title = "test"),
dashboardSidebar(),
dashboardBody(h6("Table is editable"),
DT::DTOutput("fruit", width = "400px"))
)
server <- function(input, output, session) {
fruit_df <- reactiveValues("df" = data.frame(fruit_name = c("apple","cherry","pineapple","pear"),
fruit_lbs = c(2,5,6,3)) )
output$fruit <- DT::renderDT({
DT::datatable(fruit_df$df, editable = T,
extensions = 'Buttons', #Extra functions for the table
options = list("dom" = 'T<"clear">lBfrtip',
buttons = "csv"
)
)
})
}
shinyApp(ui, server)发布于 2022-07-06 18:19:22
感谢Silentdevildoll关于‘按钮’扩展DT‘的建议,我能够实现我想要的。董事会上还有其他我还没有探讨过的建议。谢谢大家宝贵的意见!
library(shiny)
library(shinydashboard)
library(DT)
ui <- dashboardPage(
dashboardHeader(title = "test"),
dashboardSidebar(),
dashboardBody(shiny::selectizeInput(inputId = "apple_lbs_filter",
label = "Apple lbs",
choices = c(1:10)),
shiny::selectizeInput(inputId = "cherry_lbs_filter",
label = "Cherry lbs",
choices = c(1:10)),
shiny::selectizeInput(inputId = "pineapple_lbs_filter",
label = "Pineapple lbs",
choices = c(1:10)),
shiny::selectizeInput(inputId = "pear_lbs_filter",
label = "Pear lbs",
choices = c(1:10)),
shiny::actionButton(inputId = "update_lbs",label = "Update lbs"),
DT::DTOutput("fruit"))
)
server <- function(input, output, session) {
fruit_df <- shiny::reactiveValues()
fruit_df$df <- data.frame(fruit_name = c("apple","cherry","pineapple","pear"),
fruit_lbs = c(2,5,6,3))
output$fruit <- DT::renderDT({
DT::datatable(fruit_df$df,editable = TRUE,extensions = 'Buttons',options = list(
dom = 'frtBip',
buttons = c('csv')
))
})
lbs_newentry <- shiny::observe({
if(input$update_lbs > 0) {
lbs_newline <- shiny::isolate(c(
input$apple_lbs_filter,
input$cherry_lbs_filter,
input$pineapple_lbs_filter,
input$pear_lbs_filter
))
shiny::isolate(fruit_df$df <- cbind(fruit_name = c("apple",
"cherry",
"pineapple",
"pear"),
fruit_lbs = lbs_newline))
}
})
}
shinyApp(ui, server)https://stackoverflow.com/questions/72886895
复制相似问题