将列名传递给使用dplyr函数的书面函数

时间:2017-06-20 23:44:19

标签: r function dplyr

我有一个我写的函数,它应该过滤一些值然后产生交叉制表。它使用dplyr过滤器过滤值,选择命令。

我的问题是,当我传递列的名称或函数时,我得到一个错误,当我将名称作为字符串传递给""在它周围,它不会过滤观察结果。 这是代码:

fnDoCrosstab <- function(a) {
  x <- surv_data1 %>% filter(a != "blank") %>% select(a) %>% as.matrix() %>% as.vector()
  y <- surv_data1 %>% filter(a != "blank") %>% select(segment_name) %>% as.matrix() %>% as.vector()
  CrossTable(x,y, format = "SPSS",prop.chisq = F)
}
fnDoCrosstab(b_thisyear)

1 个答案:

答案 0 :(得分:2)

使用最新版本的dplyr(0.7),你可以做这样的事情

library(dplyr)

fnDoCrosstab <- function(a) {
  a <- enquo(a)
  x <- mtcars %>% filter((!!a) != 0) %>% select(mpg, !!a) %>% as.vector()
  x
}
fnDoCrosstab(am)
fnDoCrosstab(vs)

您使用enquo()捕获未评估的字段名称,然后根据需要使用!!

展开该名称