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

R语言plot_ly绘图报错:Error in if (is.na(col)) { : the condition has length >1

报错原因分析及修复方案

核心报错原因

报错Error in if (is.na(col)) { : the condition has length >1主要来自两个问题:

  • 拼写错误导致的NA值:代码中ifelse(data$Feb22 < data$BJan22,"red", "black")里的BJan22是笔误,应该是Jan22。引用不存在的列会生成包含NA的cols1向量,后续plotly处理颜色时触发长度判断错误。
  • plotly颜色参数的错误用法:add_markers中用I(cols1)包裹颜色向量是错误的。I()是ggplot体系中用来阻止自动映射的函数,plotly中直接传入颜色向量即可,不需要I()。用I()会让plotly把整个向量当成单个颜色值处理,而内部判断逻辑只接受单个值,因此抛出“条件长度大于1”的错误。

额外潜在问题

size1 <- Feb22 - Jan22生成的向量包含负数(比如2-4=-2),散点图的size不能为负数,会导致绘图异常,需要处理(比如取绝对值或设置最小size)。

修复后的代码

x <- c(0,1,2,3,4,5)
Jan22 <- c(1,4,2,3,4,5)
Feb22 <- c(1,2,3,4,5,6)

data <- data.frame(x, Jan22, Feb22)

# 修正拼写错误
cols1 <- ifelse(data$Feb22 > data$Jan22, "green", 
                ifelse(data$Feb22 < data$Jan22,"red", "black"))

# 处理负数size问题,取绝对值确保size为正
size1 <- abs(Feb22 - Jan22)

plot_ly(data, x = ~x, type = 'scatter3d', mode = 'markers') %>%
  add_markers(y = ~Jan22, z = "Baseline", color = "Black", size = 1) %>%
  # 去掉I(),直接传入颜色向量
  add_markers(y = ~Feb22, z = "Feb-22", color = ~cols1, size = ~size1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:25:37