【发布时间】:2014-12-19 00:01:37
【问题描述】:
我正在尝试建立一个用户定义的函数,该函数输入来自活动数据帧的预定变量(独立和依赖)。让我们以下面的示例数据框df 为例,看看其他记录变量导致的抛硬币结果:
> df
outcome toss person hand age
1 H 1 Mary Left 18
2 T 2 Allen Left 12
3 T 3 Dom Left 25
4 T 4 Francesca Left 42
5 H 5 Mary Right 18
6 H 6 Allen Right 12
7 H 7 Dom Right 25
8 T 8 Francesca Right 42
dfdata 框架有一个二项式响应 outcome 是正面或反面,我将看看 person、hand 和 age 可能如何影响这个分类结果。我计划使用一种前向选择方法,该方法将针对toss 测试一个变量,然后继续添加更多变量。
为了简单起见,我希望能够在我的用户定义函数之前识别响应/依赖(例如,outcome)和预测/独立(例如,person,hand)变量比如:
> independent<-c('person','hand','age')
> dependent<-'outcome'
然后使用lapply 和glm 函数创建我的函数:
> test.func<-function(some_data,the_response,the_predictors)
+ {
+ lapply(the_predictors,function(a)
+ {
+ glm(substitute(as.name(the_response)~i,list(i=as.name(a))),data=some_data,family=binomial)
+ })
+ }
然而,当我尝试使用预定向量运行函数时,会发生这种情况:
> test.func(df,dependent,independent)
Error in as.name(the_response) : object 'the_response' not found
我的预期反应如下:
models<-lapply(independent,function(x)
+ {
+ glm(substitute(outcome~i,list(i=as.name(x))),data=df,family=binomial)
+ })
> models
[[1]]
Call: glm(formula = substitute(outcome ~ i, list(i = as.name(x))),
family = binomial, data = df)
Coefficients:
(Intercept) personDom personFrancesca personMary
1.489e-16 -1.799e-16 1.957e+01 -1.957e+01
Degrees of Freedom: 7 Total (i.e. Null); 4 Residual
Null Deviance: 11.09
Residual Deviance: 5.545 AIC: 13.55
[[2]]
Call: glm(formula = substitute(outcome ~ i, list(i = as.name(x))),
family = binomial, data = df)
**End Snippet**
如您所知,使用 lapply 和 glm,我创建了 3 个简单的模型,而无需单独完成所有额外工作。您可能会问,当您有简单的代码时,为什么要创建用户定义的函数?我计划运行while 或repeat 循环,它会减少混乱。
感谢您的帮助
【问题讨论】: