gt包summary_rows()设置有效数字报缺少data参数如何解决
报错成因
summary_rows()的formatter参数接收的对象必须是可调用的格式化函数,你当前写法里传入的fmt_number(n_sigfig = 1)是直接触发函数执行的调用语句。而fmt_number()的第一个必填参数是gt表对象data,你直接调用时没有传入这个必填参数,代码运行到此处就会直接抛出“缺少参数'data'”的错误,根本不会进入summary_rows()的内部执行逻辑。
修正方法
不要在formatter参数位置直接写带括号、带参数的函数调用语句,有两种标准写法可以实现需求:
- 写法1(官方推荐,最简洁):仅向
formatter传入fmt_number函数名本身,把格式化需要的参数统一放在formatter_args参数中,以列表形式传递:
library(gt) library(tidyverse) iris %>% gt(groupname_col = "Species") %>% summary_rows( groups = TRUE, columns = c(Sepal.Length:Petal.Width), fns = list( Mean = "mean", SD = "sd" ), formatter = fmt_number, formatter_args = list(n_sigfig = 1) )
- 写法2(适合复杂格式化场景):用匿名函数包裹格式化逻辑,手动给
fmt_number传入待处理的表对象和对应参数,兼容所有gt和R版本:
library(gt) library(tidyverse) iris %>% gt(groupname_col = "Species") %>% summary_rows( groups = TRUE, columns = c(Sepal.Length:Petal.Width), fns = list( Mean = "mean", SD = "sd" ), formatter = function(data) { fmt_number(data, n_sigfig = 1) } )
两种写法运行后都可以正常生成按物种分组的表格,汇总行的均值、标准差结果都会按设置保留1位有效数字,不会再触发参数缺失报错。
内容的提问来源于stack exchange,提问作者Raphaël Bilgraer
相关产品推荐
相关产品推荐

