函数R中的Dplyr变量名称
Posted
技术标签:
【中文标题】函数R中的Dplyr变量名称【英文标题】:Dplyr variable names in function R 【发布时间】: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])
【问题讨论】:
【参考方案1】:您需要区分变量名称是符号(不确定这是否是好词)还是字符串。 NSE 指的是符号,即您不写引号。在您的第一个示例中,您在第二个 - 字符串中使用符号。对于字符串,另一种语法是必要的。你需要使用.data[[variable]]
,而不是variable
:
library(dplyr)
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(.data[[bin_variable]]) %>%
summarise(N_ = n(),
min_x = min(.data[[variable]]),
max_x = max(.data[[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])
如果你还没有看到,这里有一个来源:Programming with dplyr
【讨论】:
以上是关于函数R中的Dplyr变量名称的主要内容,如果未能解决你的问题,请参考以下文章