[英]how to pass a column name to a function
我編寫了一個函數,進行了一些分析,包括使用NPS
軟件包計算稱為“ Net Promoter Score”的度量。
library(dplyr)
library(tidyr)
library(NPS)
df<-data.frame(score = sample(c(0:10),15,replace=TRUE),
variable = sample(c('A', 'B', 'C'),15,replace=TRUE)
)
analyzer <- function(df,var, sco){
df %>% group_by_(var) %>% transmute(n= nps(sco)) %>% unique()
}
analyzer(df,'variable','score')
這將返回所有變量級別的NA
。
現在,dplyr函數可以處理以字符形式傳遞給x
的方法(即,我在這里使用的_
版本),但是nps
函數沒有。 我還嘗試將分數列傳遞為nps(.[[score]])
但這會返回整個列的NPS,並且不會按group_by級別對其進行細分。
您可以使用rlang包,然后用!!括起來!
library(dplyr)
library(tidyr)
library(NPS)
library(rlang)
df<-data.frame(score = sample(c(0:10),15,replace=TRUE),
variable = sample(c('A', 'B', 'C'),15,replace=TRUE)
)
analyzer <- function(df,var, sco){
var <- rlang::enquo(var)
sco <- rlang::enquo(sco)
df %>% group_by(!!var) %>% transmute(n= nps(!!sco)) %>% unique()
}
analyzer(df, variable,score)
這是因為未正確評估函數的輸入-
(請注意,此處實現該方法的方法將起作用,無論您輸入的是裸表達式x = x
還是字符x = "x"
)
library(dplyr)
library(tidyr)
library(NPS)
set.seed(123)
# data
df <- data.frame(score = sample(c(0:10), 15, replace = TRUE),
variable = sample(c('A', 'B', 'C'), 15, replace = TRUE))
# custom function
analyzer <- function(df, var, sco) {
var <- rlang::ensym(var)
sco <- rlang::ensym(sco)
df <- df %>%
group_by(., !!rlang::enquo(var)) %>%
transmute(., n = NPS::nps(!!rlang::enquo(sco))) %>%
unique()
return(df)
}
# using function
analyzer(df, 'variable', 'score')
#> # A tibble: 3 x 2
#> # Groups: variable [3]
#> variable n
#> <fct> <dbl>
#> 1 C -0.333
#> 2 A -0.4
#> 3 B -0.25
由reprex軟件包 (v0.2.1)創建於2018-11-18
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.