【问题标题】:Why is input$tableid_all_rows (DT) working in Shiny?为什么 input$tableid_all_rows (DT) 在 Shiny 中工作?
【发布时间】:2019-03-14 13:03:51
【问题描述】:

我有以下应用:

...
              selectInput("cars", "Pick a Car: ",
                          c("All" = "All Cars",
                            "Ford" = "Ford",
                            "Volvo" = "Volvo",
                            "Ferrari" = "Ferrari",
                            "Fiat" = "Fiat",
                            "Merc" = "Merc"))
      )),

    shinySaveButton("save", "Save file", "Save file as ...", filetype=list(csv="csv")),
    DT::dataTableOutput('table1')
      )
    )

# Define server logic required to draw a histogram
server <- function(input, output, session) {

  mtcars$car <- rownames(mtcars)

  output$table1 <-renderDataTable({
    mtcars %>%
      filter(stringr::str_detect(car, as.character(input$cars)) | input$cars == 'All Cars')
    })

  observe({
    volumes <- c("UserFolder"="~/Documents/R1/DwnLdWord/saves")
    shinyFileSave(input, "save", roots=volumes, session=session)
    fileinfo <- parseSavePath(volumes, input$save)
    data <- input$table1_rows_all
    if (nrow(fileinfo) > 0) {
      write.csv(data, fileinfo$datapath)
    }
  })
}
# Run the application 
shinyApp(ui = ui, server = server)

当我保存静态数据集(如irismtcars)时,文件会保存实际数据。但是,从图像中可以看出,我想保存过滤后的 DT 的内容。

我认为这就是 input$tableid_rows_all 的用途,但我只得到随机整数/数字值。我一直对这种废话感到困扰,但我真的很想让它工作,因为它是一个非常有价值的功能。

帮助?

【问题讨论】:

    标签: r shiny dt


    【解决方案1】:

    检查一下:

    server <- function(input, output, session) {
    
      mtcars$car <- rownames(mtcars)
    
      output$table1 <-renderDataTable({
        mtcars %>%
          filter(stringr::str_detect(car, as.character(input$cars)) | input$cars == 'All Cars')
        })
    
      observe({
        volumes <- c("UserFolder"="~/Documents/R1/DwnLdWord/saves")
        shinyFileSave(input, "save", roots=volumes, session=session)
        fileinfo <- parseSavePath(volumes, input$save)
         data <- mtcars[input$table1_rows_selected,]
        if (nrow(fileinfo) > 0) {
          write.csv(data, fileinfo$datapath)
        }
      })
    }
    # Run the application 
    shinyApp(ui = ui, server = server)
    
    1. 您想使用rows_selectd,因为rows_all 会返回您表中的所有rows
    2. 您需要用您的表名 (table1) 替换 tableId
    3. 您没有得到乱码,而是您选择的那些行的索引/行数(在您的情况下,全部)
    4. 要检索所有数据而不是行号,您需要mtcars[input$table1_rows_selected,]

    我希望这对你有用。 最好的!

    【讨论】:

    • 谢谢!我要试一试,看看会发生什么:P
    猜你喜欢
    • 2016-05-22
    • 2021-05-06
    • 2021-03-30
    • 2021-07-02
    • 2019-01-20
    • 2021-11-04
    • 2021-06-25
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多