R语言:动态修改汇总表标签名,R Markdown设置分位数标签报错求助
解决R函数动态修改汇总表标签的问题
原代码的核心错误
- 函数参数定义语法错误:不能在参数列表里直接写
options(),正确方式是用getOption()设置参数默认值 - 未定义变量就使用:比如第一个函数里的
p25没有在参数中声明 - 字符串未加引号:中位数版本里
getOption(Med_n)中的Med_n需要加引号成为"Med_n" - 变量名不匹配:函数调用时用
data = df,但函数参数是dataset,需要统一;summarise生成的med在mutate里错误写成Median = Median
修正后的单百分位数版本代码
df <- data.frame(Name = c("asdf","kjhgf","cvbnm","rtyui","cvbnm","jhfd","cvbnm","sdfghj","cvbnm","dfghj","cvbnm"), sale=c(27,28,27,16,14,25,14,14,19,18,28), city=c("CA","TX","MN","NY","TX","MT","HU","KL","TX","SA","TX"), Dept = c("HH","MM","NN","MM","AA","VV","MM","HU","JJ","MM","ZZ")) # 全局设置选项(可选,R Markdown中可在开头设置) options(percentile25 = "25th Perc") t1 <- function(dataset, var, name, p25 = getOption("percentile25", default = "25th percentile")) { var_expr <- rlang::parse_expr(var) tabl1 <- dataset %>% dplyr::filter(!is.na(!!var_expr)) %>% dplyr::summarise( q25 = quantile(!!var_expr, type = 6, probs = 0.25, na.rm = TRUE), N = sum(!is.na(!!var_expr)) ) summ_tab <- tabl1 %>% dplyr::mutate(" " = !!name) %>% dplyr::rename(!!p25 := q25) %>% dplyr::select(" ", everything(), N) summ_tab } # 调用函数(参数名匹配dataset) t1(dataset = df, var = "sale", name = "listd")
修正后的中位数扩展版本代码
# 全局设置中位数标签选项 options(Med_n = "50th Perc") t1_med <- function(dataset, var, name, p25 = getOption("percentile25", default = "25th percentile"), med_label = getOption("Med_n", default = "Median")) { var_expr <- rlang::parse_expr(var) tabl1 <- dataset %>% dplyr::filter(!is.na(!!var_expr)) %>% dplyr::summarise( q25 = quantile(!!var_expr, type = 6, probs = 0.25, na.rm = TRUE), med = quantile(!!var_expr, type = 6, probs = 0.5, na.rm = TRUE), N = sum(!is.na(!!var_expr)) ) summ_tab <- tabl1 %>% dplyr::mutate(" " = !!name) %>% dplyr::rename(!!p25 := q25, !!med_label := med) %>% dplyr::select(" ", everything(), N) summ_tab } # 调用函数 t1_med(dataset = df, var = "sale", name = "listd")
R Markdown中动态设置参数的方式
在R Markdown文档开头设置全局选项,即可动态覆盖默认标签:
--- title: "动态标签示例" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) # 自定义标签 options(percentile25 = "Lower Quartile", Med_n = "Middle Value")
# 调用函数即可使用自定义标签 t1(dataset = df, var = "sale", name = "listd") t1_med(dataset = df, var = "sale", name = "listd")
内容的提问来源于stack exchange,提问作者samrr_tr
相关产品推荐
相关产品推荐

