Как загрузить вывод Rhandsontable в .xlsx и .pdf? - PullRequest
0 голосов
/ 13 июля 2020

Я хотел бы загрузить изменяемый выходной объект из приложения R Shiny в форматы .xlsx и .pdf. Кто-нибудь знает, как это сделать? Например, я хочу загрузить таблицы на вкладке результатов в приложении ниже (коды скопированы из моего другого вопроса ранее):

library(shiny)
library(rhandsontable)

ui <- navbarPage("App",
                 
                 tabPanel("Input",
                          numericInput('num_of_table', "Number of sub tabs: ", value = 1, min = 1, max = 10),
                          uiOutput("input")),
                 
                 tabPanel("Results",
                          uiOutput("results"))
                 
)

server <- function(input, output,session) {
  
  ### Input ### 
  input_table <- reactive({
    list_of_input_table = list()
    
    for (i in c(1:input$num_of_table)){
      mat <- matrix(c(1:25) * i, ncol = 5, nrow = 5)
      list_of_input_table[[i]] = as.data.frame(mat)
    }
    
    index = c(1:i)
    list_of_input_table[index]
  })
  
  observeEvent(input$num_of_table, {
    lapply(seq_len(input$num_of_table), function(i) {
      output[[paste0('input_table_', i)]] <- renderRHandsontable({
        rhandsontable(input_table()[[i]])
      })
    })
  })
  
  output$input <- renderUI({
    
    nTabs = input$num_of_table
    
    myTabs1 = lapply(seq_len(nTabs), function(x){
      tabPanel(paste("Tab", x),
               column(12,
                      rHandsontableOutput(paste0("input_table_", x))))
    })
    do.call(tabsetPanel, myTabs1)
    
  })
  
  ### Results ###
  results_table <- reactive({
    
    list_of_results_table = list()
    for (i in c(1:input$num_of_table)){
      req(input[[paste0("input_table_", i)]])
      list_of_results_table[[i]] <- hot_to_r(input[[paste0("input_table_", i)]])[2:5]/hot_to_r(input[[paste0("input_table_", i)]])[1:4]
      }
    return(list_of_results_table)
  })
  
  
  observeEvent(input$num_of_table, {
    lapply(seq_len(input$num_of_table), function(i) {
      output[[paste0('results_table_', i)]] <- renderRHandsontable({
        
        rhandsontable(results_table()[[i]])
      })
    })
  })
  
  output$results <- renderUI({
    
    nTabs = input$num_of_table
    
    myTabs2 = lapply(seq_len(nTabs), function(x){
      tabPanel(paste("Tab", x),
               column(12,
                      rHandsontableOutput(paste0("results_table_", x))))
    })
    do.call(tabsetPanel, myTabs2)
    
  })
}


shinyApp(ui,server)

Благодарю за любую помощь! Спасибо!

...