【问题标题】:Handling Errors in a plotting function处理绘图函数中的错误
【发布时间】:2026-02-01 12:45:01
【问题描述】:

我有一个闪亮的应用程序,它接受一个 csv 文件的输入。

我在server.R有一个绘图功能

myPlot <- function(data){此函数使用括号中数据框中的变量。此数据框是上传文件的输入。}

想象一下,如果数据框没有函数使用的列,我们将在闪亮选项卡中遇到错误。

如何处理这样的错误?

我想通过抛出一条消息“以下文件不兼容”来处理它。

【问题讨论】:

  • 你可以使用validate()need()shiny.rstudio.com/articles/req.html
  • 不会作为验证工作,需要检查输入,但在这种情况下,我们需要将上传的文件应用于绘图函数。
  • tryCatch(myplot(ss),error = function(e){print("Did it")},warning = function(e){print("Did it")}) 做了以下适用于大多数错误。但是它不处理 facet_wrap 在 layout_base(data, vars, drop = drop) 中出现错误:至少一层必须包含用于构面的所有变量我该如何处理?需要一个强大的绘图错误处理程序

标签: r shiny shiny-server shinydashboard


【解决方案1】:

正如@UnnamedUser 建议的那样,您可以使用validate()need() 函数来检查条件:

示例:我正在尝试绘制 data$Col_Adata$Col_B。该图仅在两列都在 data.frame 中时才会呈现,否则会显示预定义的错误消息。

library(shiny)

data <- data.frame(
  Col_A = 1:5,
  Col_D = 16:20)

ui <- fluidPage(
  plotOutput("plot")
)

server <- function(input, output, session){
  output$plot <- renderPlot({
    validate(
      need(
        sum(c("Col_A", "Col_B") %in% colnames(data)) == 2, "Col_A and/or Col_B columns are missing!")
    )
    plot(data$Col_A, data$Col_B)
  })
}

shinyApp(ui, server)

【讨论】: