如何将列名字符向量正确传递给支持多参数的tabyl函数?
问题:janitor::tabyl无法识别字符向量中的多列参数
将包含多个列名的字符向量传给自定义函数内的tabyl时,tabyl仅处理向量的第一个元素,生成单变量统计表,而非期望的多列交叉表。需要保留向量传递方式,因为还要对该向量执行其他操作。
解决方案
tabyl的多列参数为位置式输入(即tabyl(data, col1, col2)),直接传递字符向量会被识别为单个参数。可以用do.call将向量拆分为多个独立参数传递给tabyl,同时不影响后续对向量的其他操作。
修正后的代码
library("tidyverse") library("janitor") table_func <- function(data=NULL, vars=NULL) { # 用do.call将vars拆分为tabyl的多个列参数 result <- do.call(tabyl, c(list(data), vars)) # 其他需要用到all_of(vars)的代码示例(比如筛选列) # data %>% select(all_of(vars)) return(result) } dat <- tibble(x=c(1:4), y=c(5:8)) vc <- c("x","y") table_func(dat, vc)
输出结果
x 5 6 7 8 1 1 0 0 0 2 0 1 0 0 3 0 0 1 0 4 0 0 0 1
内容的提问来源于stack exchange,提问作者Modern_ibex
相关产品推荐
相关产品推荐

