Shiny应用无法渲染Rmarkdown文件:本地正常但Shiny内报错求助
Iris数据集Shiny应用报告下载问题修复
问题根源
你的代码存在4处关键错误,导致Rmarkdown无法在Shiny中正常渲染:
- 下载按钮ID不匹配:UI中
downloadButton的ID是project,但server端绑定的output是print,两者必须一致 - 字符串语法错误:server中
filename = "report.html缺少闭合双引号 - 包名拼写错误:加载的是
library(ggplot),正确包名应为ggplot2 - downloadHandler语法错误:该函数的参数格式错误,
filename和content应作为独立参数传入,而非嵌套在大括号内
修正后的完整代码
report.Rmd(无需修改,保持原内容)
library(shiny) library(ggplot2)
date: "2023-01-15" output: html_document params: x_column: "Sepal.Width" y_column: "Sepal.Length"
library(ggplot2) ggplot(data = iris)+ aes_string(params$x_column,params$y_column)+ geom_point()
修正后的Shiny应用代码
library(shiny) library(ggplot2) # 修正包名拼写 library(rmarkdown) ui <- fluidPage( titlePanel("Iris Data"), sidebarLayout( sidebarPanel( selectizeInput("xcol", "Choose X Axis", choices = names(iris) ), selectizeInput("ycol", "Choose Y Axis", choices = names(iris) ), downloadButton("reportDownload", "Download plot") # 统一按钮ID ), mainPanel( plotOutput("plot") ) ) ) server <- function(input, output) { # 修正字符串闭合引号错误 filename = "report.html" output$plot <- renderPlot({ ggplot(data=iris)+ aes_string(x=input$xcol, y=input$ycol)+ geom_point() }) # 修正downloadHandler语法,统一output ID与按钮ID output$reportDownload <- downloadHandler( filename = function() { "report.html" }, content = function(file) { rmarkdown::render("report.Rmd", output_file = file, params = list(x_column = input$xcol, y_column = input$ycol)) } ) } # 启动Shiny应用(原代码缺失此部分) shinyApp(ui = ui, server = server)
额外说明
- 原Shiny代码缺少
shinyApp(ui, server)启动语句,补充后才能正常运行 aes_string已被ggplot2弃用,建议改用.data[[params$x_column]]的语法,例如:ggplot(data = iris)+ aes(x = .data[[params$x_column]], y = .data[[params$y_column]])+ geom_point()
内容的提问来源于stack exchange,提问作者Kevin Roy
相关产品推荐
相关产品推荐

