"Shiny App" Загружает файл -> Что-то делает -> Файл выходов - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь написать свое первое приложение Shiny, которое читает файл PDF, извлекает таблицы и сохраняет его в документе Excel.

Мне не удается создать подходящий код.Пока у меня есть: 1) Для пользовательского интерфейса

    shinyUI(fluidPage(   
        titlePanel("CMM Report"),      
        sidebarPanel(
               fileInput("file", "Upload Report")
     ),

     downloadButton("dl", "Download")

))

2) Для сервера

library(shiny)
library (tabulizer)
library(writexl) 

shinyServer(function(input, output) {       
    data <- reactive({
    file1 <- input$file
    if(is.null(file1)){return()}
    file1 <- ExtractTable (file1)        
})
## Download
output$dl <- downloadHandler(
  filename = function() { "ae.xlsx"}, 
  content = function(file) {write_xlsx(data, path = file)}  
)    
})

Я не уверен, нужно ли мне поместить код для извлечения таблицы в функцию и гдечтобы вызвать функцию, чтобы она работала.Любая помощь ДЕЙСТВИТЕЛЬНО приветствуется.
Файл данных примера взят из отчета <- "<a href="http://www.stat.ufl.edu/~athienit/Tables/Ztable.pdf" rel="nofollow noreferrer">http://www.stat.ufl.edu/~athienit/Tables/Ztable.pdf"

Функция для извлечения данных

ExtractTable <- function (report){
  lst <- extract_tables(report, encoding="UTF-8") 

  # Delete blank columns
  lst[[1]] <- lst[[1]][, -3]
  lst[[2]] <- lst[[2]][, -4]

  # Bind the list elements 
  table <- do.call(rbind, lst)
  table <- as.data.frame(table[c(2:37, 40:nrow(table)), ],
                         stringsAsFactors=FALSE) # ...w/o obsolete rows

  # Take over colnames, cache rownames to vector
  colnames(table) <- table[1, ]
  rn <- table[2:71, 1]
  table <- table[-1,-1] # and bounce them out of the table

  #  Coerce to numeric 
  table <- as.data.frame(apply(table[1:70,1:10], 2, 
                               function(x) as.numeric(as.character(x))))
  rownames(table) <- rn 

  return(table)

}

1 Ответ

0 голосов
/ 28 февраля 2019

Не могли бы вы попробовать:

shinyServer(function(input, output) {       
    data <- reactive({
    file1 <- input$file
    if(is.null(file1)){return()}
    ExtractTable(file1$datapath) # $datapath was missing       
})
## Download
output$dl <- downloadHandler(
  filename = function() { "ae.xlsx"}, 
  content = function(file) {write_xlsx(data(), path = file)} # parentheses () were missing
)    
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...