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

R生成绘图报错Error in xy.coords(x,y): 'x'和'y'长度不一致如何解决

报错原因

函数内部重写了全局变量dmda:你在函数内执行dmda<-paste(rev(unlist(strsplit(dmda, "-", fixed = TRUE))), collapse = "/")后,原本全局变量dmda的值2021-06-30被覆盖为30/06/2021,后续执行match(dmda, df$date)时,df$date都是yyyy-mm-dd格式,匹配不到任何结果,最终m变成了长度为0的空值,调用abline(h=m)时触发长度不匹配的报错。

解决方案

把函数内部格式化后的日期变量改名,避免覆盖全局的原始日期变量即可,修正后完整代码如下:

library(dplyr)

df <- structure(
  list(date = c("2021-06-30","2021-06-30","2021-07-07","2021-07-07","2021-07-09","2021-07-09","2021-07-09","2021-07-16"),
       Code = c("ABC","BCD","ABC","BCD","DCE","CDE","DCE","CDE"),
       Week= c("Wednesday","Wednesday","Wednesday","Wednesday","Friday","Friday","Friday","Friday"),
       DR1 = c(4,1,4,3,3,4,3,5)),
  class = "data.frame", row.names = c(NA, -8L))

dmda<-"2021-06-30"
CodeChosse<-"ABC"

datas <- structure(
  list(Code = c("ABC","ABC"),
       Days = c(11,12),
       Numbers = c(11,12)),
  class = "data.frame", row.names = c(NA, -2L))

f1 <- function(dat, code_nm) {
  dat <- subset(dat,  Code == code_nm)
  
  mxrange <-  range(datas$Numbers) 
  mxrange[2] <- mxrange[2] - (mxrange[2] %%10) + 10
  max<-max(datas$Days, na.rm = TRUE)+1
  # 改名避免覆盖全局dmda变量
  plot_date <- paste(rev(unlist(strsplit(dmda, "-", fixed = TRUE))), collapse = "/")
  
  plot(Numbers ~ Days,  xlim= c(0,max), ylim= c(0,mxrange[2]),
       xaxs='i',data = dat,main = paste0(plot_date, "-", code_nm))

  if (nrow(dat)<=2){
    m<-df %>%
      group_by(Code,Week) %>%
      summarize(across(starts_with("DR1"), mean))
    # 这里用的还是原始格式的全局dmda,可正常匹配
    m <- subset(m, Week == df$Week[match(dmda, df$date)] & Code == CodeChosse)$DR1
    
    abline(h=m,lwd=2) 
    points(0, m, col = "red", pch = 19, cex = 2, xpd = TRUE)
    text(.1,m+ .5, round(m,1), cex=1.1,pos=4,offset =1,col="black")
  }
}

f1(datas, CodeChosse)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:06:03