如何在R语言表格单元格中写入带水平线的分数
解决方案
问题根源是grid.table的parse=TRUE解析的是plotmath语法(R内置的数学表达式语法),而非LaTeX语法,所以用LaTeX的\frac{}{}会报错,应该用plotmath的frac(分子, 分母)函数。
仅修正列头分数显示的代码
library(grid) library(gridExtra) library(glue) data1P <- data.frame( c("[1, 5)", "[5, 7)", "[7, 9)", "[9, 10]"), c("6", "7" ,"22" ,"23"), c("4", "2", "2", "1"), c("1.5", "3.5", "11" , "23") ) # 用plotmath的frac()定义列名的分数表达式,遵循plotmath语法格式 colnames(data1P) <- lapply( list( "X\\Y= [1,4)", "n[i]", "c[i]", "d[i] == frac(n[i], c[i])" # 替换为plotmath的frac函数 ), glue ) tt <- ttheme_default(colhead=list(fg_params = list(parse=TRUE))) grid.newpage() grid.table(data1P, rows = NULL, theme=tt)
同时修正单元格数值为水平分数的代码
如果需要单元格内的数值也显示为上下结构的分数,可以将数值转换为plotmath表达式,并开启单元格的解析:
library(grid) library(gridExtra) library(glue) # 存储分子分母,后续生成plotmath分数表达式 data1P <- data.frame( Interval = c("[1, 5)", "[5, 7)", "[7, 9)", "[9, 10]"), n_i = c(6, 7, 22, 23), c_i = c(4, 2, 2, 1) ) # 生成d_i的plotmath分数字符串 data1P$d_i <- mapply(function(n, c) glue("frac({n}, {c})"), data1P$n_i, data1P$c_i) # 列名使用plotmath语法 colnames(data1P) <- c( "X\\Y= [1,4)", "n[i]", "c[i]", "d[i] == frac(n[i], c[i])" ) # 同时开启表头和单元格的plotmath解析 tt <- ttheme_default( colhead=list(fg_params = list(parse=TRUE)), core=list(fg_params = list(parse=TRUE)) ) grid.newpage() grid.table(data1P, rows = NULL, theme=tt)
关键说明
- plotmath是R内置的数学表达式语法,与LaTeX不同,分数必须用
frac(分子, 分母)格式。 parse=TRUE参数会让grid.table将字符串解析为plotmath表达式,必须严格遵循其语法规则。- 若只需修改列头的分数显示,仅调整列名表达式即可;若要修改单元格内容,需将数值转换为plotmath分数字符串,并开启单元格的解析开关。
内容的提问来源于stack exchange,提问作者Amelia
相关产品推荐
相关产品推荐

