如何从闪亮的应用程序将图(renderPlot)作为参数传递给R Markdown?

时间:2019-04-04 13:05:48

标签: variables parameters shiny r-markdown

我正在尝试使用R Markdown下载报告表格闪亮的应用程序,但我迷路了!我需要将图从闪亮作为参数传递给R Markdown,然后将该图包括在我的报告中。 我对此进行了很多搜索,但找不到任何东西。如何在我的报告中绘制此图?

Server.R

lm_dif_filter <- reactive({
    lm_dif_corn[(lm_dif_corn$farmer == input$farmer) & (lm_dif_corn$Treat_X == 'Farmer'),]
  })

output$difPlot <- renderPlotly({
      dif <- ggplot(data=lm_dif_filter(), aes(x=Treat_Y, y=dif)) +
             geom_bar(stat="identity",color = 'black', position=position_dodge(), width = 0.7)+
             geom_hline(yintercept = 0) + 
             #annotate("text", min(Treat_Y), 0, vjust = -1, label = "Farmer")+
             theme(legend.position = "none") +
             labs(x = "Treats", y = "Diff")

      ggplotly(dif)

要下载:

output$report <- downloadHandler(
     filename = "report.pdf",
     content = function(file) {
       tempReport <- file.path(tempdir(), "report.Rmd")
       file.copy("report.Rmd", tempReport, overwrite = TRUE)

       # Set up parameters to pass to Rmd document
       params <- list(set_subtitle = input$farmer, plot =  output$difPlot)
       rmarkdown::render(tempReport, output_file = file,
                         params = params,
                         envir = new.env(parent = globalenv())
       )
     }
   )

我的report.rmd

---
title: "Some title"
params:
 set_subtitle: test
 plot: NA
subtitle: "`r params$set_subtitle`"
date: '`r format(Sys.Date(), "%B %d, %Y")`'

output:
  pdf_document:
    toc: yes 
header-includes:
    - \usepackage{fancyhdr}
always_allow_html: yes
---
\addtolength{\headheight}{1.0cm} 
\pagestyle{fancyplain} 
\lhead{\includegraphics[height=1.2cm]{bg.png}} 
\renewcommand{\headrulewidth}{0pt} 


```{r, include=FALSE}
options(tinytex.verbose = TRUE)
knitr::opts_chunk$set(echo = FALSE)
cat(params$plot)

1 个答案:

答案 0 :(得分:1)

一个简单的选择是不传递绘图,而是传递参数,并引用闪亮的应用程序和Rmd文档使用的共享绘图函数。例如,

发光的应用程序,

注意import time for i in range(24): for a in range(60): for s in range(60): print('%02d:%02d:%02d' % (i, a, s), end='', flush=True) time.sleep(1) print('', end='\r') source("util.R")

report_hist(params$n)

Rmd报告,

请注意 source("util.R") library(shiny) shinyApp( ui = fluidPage( sliderInput("slider", "Slider", 1, 100, 50), downloadButton("report", "Generate report"), plotOutput("report_hist") ), server = function(input, output) { output$report_hist <- renderPlot({ report_hist(n = input$slider) }) output$report <- downloadHandler( # For PDF output, change this to "report.pdf" filename = "report.html", content = function(file) { # Copy the report file to a temporary directory before processing it, in # case we don't have write permissions to the current working dir (which # can happen when deployed). tempReport <- file.path(tempdir(), "report.Rmd") file.copy("report.Rmd", tempReport, overwrite = TRUE) # Set up parameters to pass to Rmd document params <- list(n = input$slider) # Knit the document, passing in the `params` list, and eval it in a # child of the global environment (this isolates the code in the document # from the code in this app). rmarkdown::render(tempReport, output_file = file, params = params, envir = new.env(parent = globalenv()) ) } ) } )

report_hist(params$n)

--- title: "Dynamic report" output: html_document params: n: NA --- ```{r} # The `params` object is available in the document. params$n ``` A plot of `params$n` random points. ```{r} report_hist(params$n) #note this function was created in util.R and loaded by the shiny app. ``` 中的共享功能

util.R

这是一个演示闪亮的应用程序,您可以使用https://rstudio.cloud/project/295626

对其进行测试