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

R语言if-else语句报错:unexpected '}',求修复plot_ly条件绘图代码

修复R代码中的语法错误并优化条件绘图逻辑

我一眼就定位到你遇到的unexpected '}'错误原因了——R语言里if语句的条件必须用圆括号()包裹,你原来的代码里if ncol(yesterday_line_chart) == 6少了括号,这直接违反了R的语法规则,导致解析器无法正确识别代码结构,抛出了括号不匹配的错误。

除了修复语法错误,我还帮你优化了代码结构:原来的代码在if和else块里重复了大量相同的绘图代码,既不简洁也不利于后续维护。我们可以把公共的绘图部分抽离出来,只在需要的时候添加day_bef_yest的轨迹,这样代码更清晰,也能完整保留你想要的可视化样式。

修复并优化后的完整代码

# 初始化基础绘图对象(公共部分)
p <- plot_ly(yesterday_line_chart, x = ~hour) %>%
  add_trace(y = ~yesterday, name = 'yesterday', mode = 'lines', 
            line = list(color = 'rgb(205, 12, 24)', width = 3)) %>%
  add_trace(y = ~X95_up_conf_dow, name = 'dow upper conf', 
            line = list(color = 'rgb(77, 201, 0)', width = 4, dash = 'dot')) %>%
  add_trace(y = ~X95_low_conf_dow, name = 'dow lower conf', 
            line = list(color = 'rgb(77, 201, 0)', width = 4, dash = 'dot')) %>%
  add_trace(y = ~X95_up_conf_wd_we, name = 'we/wd upper conf', 
            line = list(color = 'rgb(126, 142, 197)', width = 4, dash = 'dot')) %>%
  add_trace(y = ~X95_low_conf_wd_we, name = 'we/wd lower conf', 
            line = list(color = 'rgb(126, 142, 197)', width = 4, dash = 'dot'))

# 根据列数条件添加前日数据轨迹
if (ncol(yesterday_line_chart) == 7) {
  p <- p %>%
    add_trace(y = ~day_bef_yest, name = 'day bef yest', mode = 'lines+markers')
}

# 统一设置布局(公共部分)
p <- p %>%
  layout(title = "Title", 
         xaxis = list(title = "Time"), 
         yaxis = list(title = "(count)"))

# 输出图表
p

关键修改点说明

  1. 修复语法错误:将if ncol(...)改为if (ncol(...)),符合R的语法要求,彻底解决了括号不匹配的错误。
  2. 抽离公共代码:把所有if和else块里重复的绘图轨迹、初始化代码统一放在开头,大幅减少冗余代码。
  3. 条件添加轨迹:只有当列数为7(存在前日数据)时,才添加day_bef_yest的轨迹,逻辑更直观清晰。
  4. 统一布局设置:把布局配置单独放在最后,避免重复编写相同的layout代码,后续调整样式只需修改一处即可。

这样修改后的代码不仅能正常运行,没有语法错误,而且在Shiny App中使用时会更稳定,后续维护成本也更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:22:35