2017-06-27 6 views
1

引数に変数名を使用できる関数を必要とします(これはデータセットの一部ですが、環境内にオブジェクトとして格納されません)、その変数名をモデル式に挿入します。例えばR - 関数の引数として列名を使用してモデル式に挿入する方法

# 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") 

動作するようにこのような機能を取得する方法はありますに取得する機能を使用しようか?あなたがsubstitute引用符で囲まずvar_nameを解析することができます

+0

my_funの内部では、 'GLM((VAR_NAME、 "Y" を再公式化)、データ=のDFを使用することができ、 family = "binomial") 'を呼び出し、回帰を実行するために' my_fun( "var1"、df) 'を使います。 – lmo

答えて

4

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 
関連する問題