我创建了一个Shiny应用程序,它涉及用户导入数据,操纵数据,创建数据表和关联的绘图。
我想使用Rmarkdown构建可下载的报告(我刚开始使用它)。但是,我不确定如何在Rmarkdown脚本中打印在R中生成的数据表和图,而不从Shiny应用程序复制整个R代码。这是一段很长的代码,所以我希望能够直接使用输出。
例如,我已复制以下应用以证明我的观点。
library(shiny)
ui <- fluidPage(
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30)
),
mainPanel(
plotOutput("distPlot"),
dataTableOutput("summary_table"),
downloadButton("report", "Generate report")
)
)
)
server <- function(input, output) {
output$distPlot <- renderPlot({
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = input$bins + 1)
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
output$summary_table <- renderDataTable({
x <- faithful
head(x,5)
})
output$report <- downloadHandler(
filename = "report.html",
content = function(file) {
tempReport <- file.path(tempdir(), "report.Rmd")
file.copy("report.Rmd", tempReport, overwrite = TRUE)
rmarkdown::render(tempReport, output_file = file,
envir = new.env(parent = globalenv())
)
}
)
}
shinyApp(ui = ui, server = server)
我想访问可下载的R markdown文件中的绘图和数据表。
答案 0 :(得分:1)
我的方法,使用app.R和test.Rmd
app.R中的创建一个反应变量,包含图/图表(替换为您自己的图)。
chart1 <- reactive({
ggmap(get_map(location = "Netherlands",
zoom = 7,
scale = 2,
color="bw",
language = "nl-NL"))
})
然后,拨打降价:
output$report <- downloadHandler(
filename = "test.pdf",
content = function(file) {
src <- normalizePath('test.Rmd')
#switch to system tempdir
#just in case the app doesn't have write persission in the current folder
owd <- setwd(tempdir())
on.exit(setwd(owd))
file.copy(src, 'test.Rmd', overwrite = TRUE)
out <- render("test.Rmd", "pdf_document" )
file.rename(out, file)
}
)
<。>在.Rmd文件中,您可以调用图表:plot(chart1())
注意图表1之后的()
遵循相同的表格结构,以及您希望在降价中包含的所有其他对象。