首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >with :如何同时使用selectInput和手动输入导出表

with :如何同时使用selectInput和手动输入导出表
EN

Stack Overflow用户
提问于 2022-07-06 16:19:52
回答 2查看 89关注 0票数 0

我想要创建一个表,该表将接受selectizeInput和手动输入的值。然后出口到CVS。我已经准备好了表,但是当我尝试导出(单击"CVS")时,它不会接受手动输入所做的更改。下面是一个例子。如何使csv导出同时采用selectizeInput和手动输入?我还觉得我的代码有点多余。是否有一种创建表的简化方法?谢谢!

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-06 17:45:54

这只是一个部分的答案,因为我已经删除了selectizeInput(),尝试根据您的请求压缩代码以简化。表的编辑可以直接在表中完成。此外,我还添加了按钮扩展,以便作为csv直接下载表。希望这能帮上忙。

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2022-07-06 18:19:22

感谢Silentdevildoll关于‘按钮’扩展DT‘的建议,我能够实现我想要的。董事会上还有其他我还没有探讨过的建议。谢谢大家宝贵的意见!

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72886895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档