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
相关产品推荐
相关产品推荐

