【发布时间】:2022-01-13 11:47:10
【问题描述】:
我正在尝试使用一些 dplyr 函数创建一个函数,但我认为我遇到了 NSE 问题。当我在参数中使用变量的实际名称时,以下函数有效,但当我尝试调用我创建的向量的元素时,它不起作用。
我认为我需要对参数的引用/取消引用做一些事情,但我有点难过:
作品:
dat1 <- read.table(text = "x1 x2 y
10 20 50
20 30.5 100
30 40.5 200
40 20.12 400
50 25 500
70 86 600
80 75 700
90 45 800", header = TRUE)
num_names <- paste(colnames(dat1[sapply(dat1, is.numeric)]))
bin_names <- paste(colnames(dat1[sapply(dat1, is.numeric)]), "bin", sep = "_")
dat1[bin_names] <- lapply(dat1[num_names], function(x) dplyr::ntile(x, n = 10))
make_iv <- function(df, variable, bin_variable){
df <- df
ivv <- df %>%
group_by({{bin_variable}}) %>%
summarise(N_ = n(),
min_x = min({{variable}}),
max_x = max({{variable}}),
SumY = sum(y),
perc_obs = (n()/nrow(df)),
ans = sum(perc_obs))
return(ivv)
}
make_iv(df = dat1,
variable = x1,
bin_variable = x1_bin)
不起作用:
dat1 <- read.table(text = "x1 x2 y
10 20 50
20 30.5 100
30 40.5 200
40 20.12 400
50 25 500
70 86 600
80 75 700
90 45 800", header = TRUE)
num_names <- paste(colnames(dat1[sapply(dat1, is.numeric)]))
bin_names <- paste(colnames(dat1[sapply(dat1, is.numeric)]), "bin", sep = "_")
dat1[bin_names] <- lapply(dat1[num_names], function(x) dplyr::ntile(x, n = 10))
make_iv <- function(df, variable, bin_variable){
df <- df
ivv <- df %>%
group_by({{bin_variable}}) %>%
summarise(N_ = n(),
min_x = min({{variable}}),
max_x = max({{variable}}),
SumY = sum(y),
perc_obs = (n()/nrow(df)),
ans = sum(perc_obs))
return(ivv)
}
make_iv(df = dat1,
variable = num_names[1],
bin_variable = bin_names[1])
【问题讨论】: