如何在函数中将 tabyl() 与两个变量一起使用?

How to use tabyl() with two variables within a function?

我正在制作两个包含大量变量的 table,因此我希望编写使用 janitor 包中的 tabyl() 的函数并映射我感兴趣的变量。

第一个函数工作正常:

cars = datasets::mtcars

first_table = function(variable){
  
  tabyl(variable, show_na = FALSE) %>% 
  adorn_pct_formatting(digits = 1) 
  
}

first_table(cars$vs)

第二个 table 以几乎相同的方式生成,但应该生成两个变量和行百分比的交叉表,而不是表示单个变量的 table。此代码和输出表示我正在尝试使用我的函数执行的操作:

cars %>% 
  tabyl(vs, am, show_na = FALSE) %>% 
  adorn_percentages("row") %>% 
  adorn_pct_formatting(digits = 1) %>% 
  adorn_ns()

然而,当我把它写成一个函数时,tabyl() 函数似乎只想识别第一个变量:

second_table = function(variable1, variable2){
  
  tabyl(variable1, variable2, show_na = FALSE) %>% 
  adorn_percentages("row") %>% 
  adorn_pct_formatting(digits = 1) %>% 
  adorn_ns() 
  
}

second_table(cars$vs, cars$am)


我不太确定问题出在哪里,我想知道如何编辑此函数来为我提供 2x2 table 以及我在没有上述函数的情况下能够生成的行百分比。

非常感谢任何帮助。

不传递列值,而是传递未加引号的列名并使用 curly_curly 运算符 {{}}

进行计算
second_table <- function(dat, variable1, variable2){
 dat %>% 
  tabyl({{variable1}}, {{variable2}}, show_na = FALSE) %>% 
  adorn_percentages("row") %>% 
  adorn_pct_formatting(digits = 1) %>% 
   adorn_ns() 

 }

-测试

second_table(cars, vs, am)
#  vs        0         1
#  0 66.7% (12) 33.3% (6)
#  1 50.0%  (7) 50.0% (7)

注意:最好将数据集名称也作为参数传递