Почему input $ tableid_all_rows (DT) работает в Shiny? - PullRequest
1 голос
/ 14 марта 2019

У меня есть следующее приложение:

...
              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)

Когда я сохраняю статический набор данных (например, iris или mtcars), файл сохраняет фактические данные. Однако, как видно на изображениях, я хочу сохранить содержимое отфильтрованного DT.

Я думал, для этого input $ tableid_rows_all , но я получаю только случайные целые / числовые значения. У меня всегда были проблемы с этой ерундой, но я действительно хотел бы заставить ее работать, потому что это такая ценная функция.

Помощь

pic1 saving resulting

1 Ответ

1 голос
/ 14 марта 2019

Проверьте это:

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. Вам необходимо заменить tableId по имени вашей таблицы (table1) для вас
  3. Вы не получаете бред, но номер индекса / строки тех строк, которые вы выбрали (в вашем случае, все)
  4. Чтобы получить все данные вместо номера строки, вам нужно mtcars[input$table1_rows_selected,]

Надеюсь, это поможет вам.Best!

...