R使用forestplot包绘制森林图报unexpected ','错误如何解决
错误原因
这个报错不是graphwidth = 'auto'这行的逗号写错了。R解析代码时会顺序扫描语法,前面的语法错误没有触发中断,读到这行时发现语法规则不匹配才抛出错误,实际是代码存在以下几处问题:
- 字符串引号缺失:
names向量中第一个研究名Dennekemp et al 2010'漏了开头的单引号,导致字符串解析逻辑错位 - 数据长度不匹配:
names向量共18个元素(1个表头+17个研究名称),但row_names中绑定的效应值列仅17个元素,缺少表头对应的占位值,cbind时维度无法对齐 - 参数传值类型错误:
graphwidth参数不支持字符串'auto'作为输入,必须传入unit()定义的网格单位对象 - 字符异常:最后一个研究的置信区间字符串
'1.02 [0.99 –1.06]'中使用了全角长破折号,不是半角减号,运行后会显示异常
修正后可运行代码
library(forestplot) names <- c('Study Name and Year', 'Dennekemp et al 2010', 'Silverman et al 2010', 'Ensor et al 2013', 'Rosenthal et al 2013', 'Wichmann et al 2013', 'Razar et al 2014', 'Straney et al 2014', 'Dennkamp et al 2015', 'Kang et al 2015', 'Haikerwal et al 2015', 'Xia et al 2017', 'Jones et al 2020', 'Kim et al 2020', 'Kojima et al 2020', 'Wang et al 2020', 'Fu-JU Cheng et al 2021', 'Kojima et al 2021') coef2 <- c(1.09, 1.04, 1.046, 1.09, 1.1, 1, 1.02, 1.07, 1.01, 1.07, 1.07, 1.017, 1.0159, 0.016, 0.0112, 1.013, 1.02) high2 <-c(1.15,1.08,1.082,1.2, 1.2, 1.07, 1.03, 1.15, 1.02, 1.13, 1.1, 0.213, 1.0166, 0.031, 0.0123, 1.0241, 1.06) low2 <-c(1.03, 0.99, 1.012, 0.99, 1, 0.93, 1, 1, 1, 1, 1.01, 0.018, 1.0151, 0.01, 0.0102, 1.002, 0.99) boxsize2 <- c(0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2) fordata <- data.frame(coef=coef2, low=low2,high=high2, boxsize=boxsize2) fordata <- rbind(NA, fordata) row_names <-cbind( names, c( 'RR (95% CI)', '1.09 [1.03-1.15]', '1.04 [0.99-1.08]','1.046 [1.012-1.082]','1.09 [0.99-1.20]','1.1 [1.00-1.20]','1.00 [0.93-1.07]','1.02 [1.00-1.03]','1.07 [1.00-1.15]','1.01 [1.00-1.02]','1.07 [1.01-1.13]','1.07 [1.04-1.10]','1.017 [0.018-0.213]','1.0159 [1.0151-1.0166]','0.016 [0.01-0.031]','0.0112 [0.0102-0.0123]','1.013 [1.002-1.0241]','1.02 [0.99-1.06]' ) ) forestplot(labeltext = row_names, mean = fordata$coef, upper = fordata$high, lower = fordata$low, is.summary=c(TRUE, rep(FALSE, 17)), boxsize = fordata$boxsize, zero = 1, xlog = FALSE, xlab = "RR (95% CI)", col = fpColors(lines="black", box="black"), ci.vertices = TRUE, xticks = NULL, colgap = unit(0.03,'npc'), hrzl_lines= TRUE, lineheight = unit(1.1,"cm"), graphwidth = unit(0.6, "npc"), txt_gp=fpTxtGp(label = gpar(cex = 0.8), title = gpar(cex = 1), ticks = gpar(cex = 0.7), xlab = gpar(cex = 0.7))
注:如果需要调整图宽度,修改
graphwidth = unit(0.6, "npc")里的0.6数值即可,取值范围0-1,数值越大图越宽。
内容的提问来源于stack exchange,提问作者peteyowen
相关产品推荐
相关产品推荐

