2016-04-26 10 views
1

Ich habe R-Code erstellt, mit dem ich Daten transformieren und analysieren und dann die Ergebnisse in Form von Tabellen in PDF-Bericht ausgeben kann. Vor kurzem habe ich beschlossen, meine Arbeit mit Colleges zu teilen, die mit R nicht vertraut sind. Deshalb möchte ich eine Shiny-App erstellen, die es ihnen ermöglicht, meine Arbeit zu nutzen, ohne R installiert zu haben. Die Shiny-App dient als Plattform zum Hochladen von Daten und zum anschließenden Herunterladen des Berichts. Leider kann ich meine Ergebnisse nicht als PDF ausgeben.Erstellen PDF-Bericht mit Benutzer-Eingabedateien - Shiny

My Shiny Code sieht folgendermaßen:

library(knitr) 

ui <- fluidPage(
    fluidRow(
    column(3, 
      wellPanel(
      fileInput(inputId = "files", 
         label = "Choose csv files", 
         accept=c('text/csv', 
           'text/comma-separated-values,text/plain', 
           '.csv'), 
         multiple = TRUE), 
      textInput('filename', 'File name', value = ''), 
      downloadButton('report', label = 'Download PDF') 
      ) 
      ) 
    ) 
) 

server <- function(input, output) { 

    data_set <- reactive({if(!is.null(input$files)) { 
    max_table = length(input$files[,1]) 

    lst <- list() 
    for(i in 1:length(input$files[,1])){ 
     lst[[i]] <- read.csv(input$files[[i, 'datapath']], sep = ",", header = TRUE, skip = 4, dec = ".") 
    } 

    lst <- lapply(lst, function(x) xtable(x))}}) 



    output$report = downloadHandler(
    filename = reactive({paste0(input$filename,'.pdf')}), 

    content = function(file) { 
     out = knit2pdf('pdf_shell.Rnw', clean = TRUE) 
     file.rename(out, file) # move pdf to file for downloading 
    }, 

    contentType = 'application/pdf' 
) 
    } 


shinyApp(ui = ui, server = server) 

Und meine .Rnw Datei sieht wie folgt aus:

\documentclass{article} 
\usepackage{tabularx} 

\begin{document} 

\begin{table}[H] 
\begin{tabularx} 
\textbf{Test Name:}& \Sexpr{input$filename} \\ 
\textbf{Date:}& \\ 
\end{tabularx} 
\end{table} 

<<echo = FALSE , message = F, >>= 
data_set 
@ 


\end{document} 

Offensichtlich die data_set Laden nicht funktioniert und ich habe keine Ahnung, wie sich vorwärts zu bewegen . Momentan möchte ich nur die Tabelle ausgeben, die aus den Daten besteht, die ich in den Shiny geladen habe.

Ich würde Ihre Hilfe wirklich schätzen.

Seitliche Anmerkung: Die CSV-Dateien sind extern einfache Datenrahmen bestehend aus Kopfzeilen und Spalten mit Daten gefüllt.

Wenn in R coutputed sollten sie so ähnlich aussehen:

$data001 
A B C D E 
X 10 30 50 70 
Y 20 40 60 80 
+1

sein kann, weil in glänzenden DATA_SET einfach sein - reaktiv, so versuchen data_set_1 zu verwenden in .Rnw und 'content = function (Datei) {data_set_1 = data_set() out = strick2pdf ('pdf_shell.Rnw', sauber = TRUE) file.rename (out, datei) # move pdf in die datei zum herunterladen } ' – Batanichek

+0

@Batanichek Vielen Dank für Ihre Antwort es funktionierte und ich bin in der Lage, Werte in PDF auszugeben. Ich muss mein Verständnis von glänzend verbessern, –

Antwort

3

Problem, weil in shiny

data_set ist reactive so kippen Sie es verwenden, wie

<<echo = FALSE , message = F, >>= 
data_set 
@ 

in Ihrem .Rnw

So versuchen

.Rnw

\documentclass{article} 
\usepackage{tabularx} 

\begin{document} 

\begin{table}[H] 
\begin{tabularx} 
\textbf{Test Name:}& \Sexpr{input$filename} \\ 
\textbf{Date:}& \\ 
\end{tabularx} 
\end{table} 

<<echo = FALSE , message = F, >>= 
data_set_1 
@ 


\end{document} 

Handler

downloadHandler(
    filename = reactive({paste0(input$filename,'.pdf')}), 

    content = function(file) { 
     data_set_1=data_set() 
     out = knit2pdf('pdf_shell.Rnw', clean = TRUE) 
     file.rename(out, file) # move pdf to file for downloading 
    }, 

    contentType = 'application/pdf' 
) 

Oder kann data_set() in .Rnw

+0

Beide 'data_set_1 = data_set()' in Handler und 'data_set()' in '.Rnw' arbeiten. Ich schätze deine Hilfe sehr. –

Verwandte Themen