You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ggplot2代码报错时跳过?求编写可扩展容错代码

适配有无分面变量的ggplot绘图方案

样本数据

dat <- structure(list(n_speed = c(7, 6, 5, 4, 7, 6, 4, 9), id = c("subj_1", 
"subj_1", "subj_1", "subj_1", "subj_2", "subj_2", "subj_2", "subj_2"
), timepoint = c("t1", "t1", "t2", "t2", "t1", "t1", "t2", "t2"
), direction = c("long", "lat", "long", "lat", "long", "lat", 
"long", "lat")), class = "data.frame", row.names = c(NA, -8L))

speed_measures <- structure(list(n_speed = c(7, 6, 5, 4, 7, 6, 4, 9), id = c("subj_1", 
"subj_1", "subj_1", "subj_1", "subj_2", "subj_2", "subj_2", "subj_2"
), timepoint = c("t1", "t1", "t2", "t2", "t1", "t1", "t2", "t2"
), direction = c("long", "lat", "long", "lat", "long", "lat", 
"long", "lat")), class = "data.frame", row.names = c(NA, -8L))

dat_combined <- speed_measures |> left_join(dat)

初始代码及报错

编写的绘图代码如下:

ggplot(data = dat_combined, aes(x = n_speed)) +
     geom_histogram() +
     facet_wrap(~direction)

运行时出现以下错误:

Error in `combine_vars()`:
! Faceting variables must have at least one value
Backtrace:
 1. base (local) `<fn>`(x)
 2. ggplot2:::print.ggplot(x)
 4. ggplot2:::ggplot_build.ggplot(x)
 5. layout$setup(data, plot$data, plot$plot_env)
 6. ggplot2 (local) setup(..., self = self)
 7. self$facet$compute_layout(data, self$facet_params)
 8. ggplot2 (local) compute_layout(..., self = self)
 9. ggplot2::combine_vars(data, params$plot_env, vars, drop = params$drop)

报错原因是当前数据集可能不包含facet_wrap所需的分面变量direction。需要编写可扩展的代码,自动适配有无该分面变量的数据集,无需单独重写绘图流程。

尝试的无效方案

曾尝试用try语句捕获错误,但未达到预期效果:

try(ggplot(data = dat_combined, aes(x = n_speed)) +
     geom_histogram() +
     facet_wrap(~direction))

最终可行代码

采纳建议后使用的最终代码,先判断数据有效性,再执行对应的逻辑:

if(is.na(dat_combined$n_speed[1])) { 
    print("No Data")
} else {
  ggplot(data = dat_combined, aes(x = n_speed)) +
          geom_histogram() +
          facet_wrap(~direction)
}

内容的提问来源于stack exchange,提问作者myfatson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:45:18