我有一個我寫的函數,它應該過濾一些值,然後生成一個交叉表。它使用dplyr過濾器過濾值,選擇命令。將列名傳遞給使用dplyr函數的書面函數
我的問題是,當我傳遞函數列的名稱時出現錯誤,並且當我以字符串的形式傳遞名稱作爲字符串時,它不會過濾觀察值。 下面是代碼:
我有一個我寫的函數,它應該過濾一些值,然後生成一個交叉表。它使用dplyr過濾器過濾值,選擇命令。將列名傳遞給使用dplyr函數的書面函數
我的問題是,當我傳遞函數列的名稱時出現錯誤,並且當我以字符串的形式傳遞名稱作爲字符串時,它不會過濾觀察值。 下面是代碼:
隨着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()
捕捉未計算的字段名稱,然後展開,作爲需要與!!
建議的重複:[dplyr變量與變量列名稱](https://stackoverflow.com/q/26003574/903061) – Gregor
還請注意''dplyr'來[用dplyr編程一個小插曲]( H ttps://cran.r-project.org/web/packages/dplyr/vignettes/programming.html),其中詳細介紹瞭如何做到這一點。 – Gregor