使用R语言gt包的tab_spanner函数时出现解析错误
解决gt包tab_spanner函数的列名解析错误
问题重现
使用gt包创建表格时,调用tab_spanner函数添加跨列标题时出现以下错误:
Error in parse(text = elt) : <text>:1:7: unexpected symbol 1: Using an ^
用户执行的完整代码:
load(paste0(wd ,"/Tables/Table2a.Rdata")) gt(table2a) %>% tab_spanner( label = 'If you help me you will be my hero', columns = names(table2a)[3:8] )
测试数据:
structure(list(Indicator = c("Real GDP growth", NA, "Private consumption", NA, "Business investment", NA, "Housing investment", NA, "Net exports - contribution to GDP growth", NA, "Employment growth", NA, "Compensation per employee", NA), Type = c("Latest Obs.", "(B)MPE", "Latest Obs.", "(B)MPE", "Latest Obs.", "(B)MPE", "Latest Obs.", "(B)MPE", "Latest Obs.", "(B)MPE", "Latest Obs.", "(B)MPE", "Latest Obs.", "(B)MPE" ), `2022 Q3` = c(0.8, 0.68, 1.02, 0.83, 2.14, 1.63, -0.77, -0.29, -395.89, -0.08, 0.35, 0.25, 0.77, 0.38), `2022 Q4` = c(0.32, 0.13, 0.87, 0.31, 7.73, -0.16, -0.69, -0.27, 99.5, 0.12, 0.29, 0.11, 1.09, 1.09), `2023 Q1` = c(NA, -0.06, NA, -0.11, NA, -0.38, NA, -0.15, NA, 0.05, NA, 0.01, NA, 1.26), `2023 Q2` = c(NA, 0.02, NA, -0.09, NA, 0.04, NA, -0.3, NA, 0.12, NA, 0.03, NA, 1.46), `2023 Q3` = c(NA, 0.43, NA, 0.36, NA, 0.89, NA, -0.21, NA, 0.18, NA, 0.01, NA, 1.23), `Annual rate of change` = c(NA, 3.14, NA, 3.59, NA, 3.35, NA, 2.79, NA, 0.04, NA, 1.98, NA, 3.97), CF = c(NA, 3.2, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), SPF = c(NA, 3.01, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, -14L), class = "data.frame")
错误原因
tab_spanner的columns参数默认会将传入的内容解析为R表达式。当列名包含空格(如Annual rate of change)时,直接传递字符串向量会被解析器误判为语法错误——空格被当成表达式的分隔符,导致解析失败。
解决方案
有两种可靠的解决方式:
方式1:使用all_of()包裹列名向量
all_of()明确告知gt包,传入的是列名集合而非表达式,避免解析错误:
load(paste0(wd ,"/Tables/Table2a.Rdata")) gt(table2a) %>% tab_spanner( label = 'If you help me you will be my hero', columns = all_of(names(table2a)[3:8]) )
方式2:直接使用列位置索引
既然目标是选择第3到第8列,直接传递位置索引更简单,无需处理列名解析问题:
load(paste0(wd ,"/Tables/Table2a.Rdata")) gt(table2a) %>% tab_spanner( label = 'If you help me you will be my hero', columns = 3:8 )
内容的提问来源于stack exchange,提问作者Alberto De Benedittis
相关产品推荐
相关产品推荐

