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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:23:37