簡體   English   中英

R-如何在函數中使用列名作為參數並插入模型公式

[英]R - how to use column names as arguments in a function and insert into a model formula

我想要一個函數,其中參數可以采用變量名(該變量名是數據集的一部分,但不存儲為環境中的對象),並將該變量名插入模型公式中。

例如:

# Some data with a couple of variables
my_df <- data.frame(y = rbinom(10, 1,0.5), var1 = runif(10), var2 = runif(10))

# A function that fits a model using predictor specified in the arguments
my_fun <- function(var_name, df){
    glm(y ~ var_name, data = df, family = "binomial")
}

當我嘗試使用該功能時,出現以下錯誤信息

my_fun(var1, my_df)
Error in eval(expr, envir, enclos) : object 'var1' not found 

# What I want the function to do
glm(y ~ var1, data = my_df, family = "binomial")

有沒有辦法讓這種功能起作用?

你可以不帶引號的解析var_namesubstitute

my_fun <- function(var_name, df){
    glm.formula <- substitute(y ~ x, list(x = substitute(var_name)))
    glm(glm.formula, data = df, family = "binomial")
}

一個例子:

my_fun(var1, my_df)

# Call:  glm(formula = glm.formula, family = "binomial", data = df)
# 
# Coefficients:
# (Intercept)         var1  
#      -1.226        3.108  
# 
# Degrees of Freedom: 9 Total (i.e. Null);  8 Residual
# Null Deviance:        13.46 
# Residual Deviance: 11.35  AIC: 15.35

glm(y ~ var1, data = my_df, family = "binomial")

# Call:  glm(formula = y ~ var1, family = "binomial", data = my_df)
# 
# Coefficients:
# (Intercept)         var1  
#      -1.226        3.108  
# 
# Degrees of Freedom: 9 Total (i.e. Null);  8 Residual
# Null Deviance:        13.46 
# Residual Deviance: 11.35  AIC: 15.35

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM