2016-04-26 84 views
1

我創建了R代碼,它允許我轉換和分析數據,然後以表格的形式將結果輸出到PDF報告中。最近,我決定與不熟悉R的大學分享我的工作。因此,我想創建Shiny應用程序,以便他們在不安裝R的情況下使用我的作品。 Shiny應用程序將作爲上傳數據並下載報告的平臺。不幸的是,我無法將我的結果輸出到PDF中。使用用戶輸入文件生成PDF報告 - 閃亮

我閃亮的代碼看起來方式如下:

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) 

而且我.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 
@ 


\end{document} 

顯然裝載data_set不工作,我不知道如何前進。 現在我想輸出從我加載到Shiny中的數據創建的表格。

我真的很感謝你的幫助。

附註: csv文件是外部簡單的數據幀,包含填充數據的標題和列。

當R中coutputed他們看起來應該是這樣的:

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

可能是因爲在閃亮data_set - 反應,所以儘量使用data_set_1 in .Rnw和'content = function(file){data_set_1 = data_set() out = knit2pdf('pdf_shell.Rnw',clean = TRUE) file.rename(out,file)#將pdf移動到文件以供下載 }' – Batanichek

+0

@Batanichek非常感謝您的迴應,並且我能夠將值輸出爲PDF。我必須提高對閃亮的理解, –

回答

3

問題,因爲在shiny

data_setreactive,所以你不能在你的.Rnw

使用它像

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

因此,嘗試

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

處理

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

,也可以是簡單的data_set().Rnw

+0

處理程序中的'data_set_1 = data_set()'和'.Rnw'中的'data_set()'都有效。我非常感謝你的幫助。 –