如何使用矢量值作为R中的变量
问题描述:
我有一个名为repay的数据框,并且我为变量名称创建了一个我感兴趣的变量名称的变量。如何使用矢量值作为R中的变量
variables<-names(repay)[22:36]
我想写一个for循环,对变量中的每个变量做一些单变量分析。例如:
for (i in 1:length(variables))
{
model<-glm(Successful~ variables[i]
,data=repay
,family=binomial(link='logit'))
}
然而,它不能识别variables[i]
作为变量,给以下错误消息:
错误model.frame.default(式=成功〜变量[I]中,数据 =偿还,:可变长度不同(发现 '变量[I]')
答
你可以从字符串创建语言对象,
var = "cyl"
lm(as.formula(sprintf("mpg ~ %s", var)), data=mtcars)
# alternative (see also substitute)
lm(bquote(mpg~.(as.name(var))), data=mtcars)
答
或者,您可以使用assign
产生与变量一样多的模型。 让我们考虑
repay<-data.table(Successful=runif(10),a=sample(10),b=sample(10),c=runif(10))
variables<-names(repay)[2:4]
产生:
>repay
Successful a b c
1: 0.8457686 7 9 0.2930537
2: 0.4050198 6 6 0.5948573
3: 0.1994583 2 8 0.4198423
4: 0.1471735 1 5 0.5906494
5: 0.7765083 8 10 0.7933327
6: 0.6503692 9 4 0.4262896
7: 0.2449512 4 1 0.7311928
8: 0.6754966 3 3 0.4723299
9: 0.7792951 10 7 0.9101495
10: 0.6281890 5 2 0.9215107
然后就可以进行循环
for (i in 1:length(variables)){ assign(paste0("model",i),eval(parse(text=paste("glm(Successful~",variables[i],",data=repay,family=binomial(link='logit'))")))) }
导致3个对象:model1
,model2
和model3
。
>model1
Call: glm(formula = Successful ~ a, family = binomial(link = "logit"),
data = repay)
Coefficients:
(Intercept) a
-0.36770 0.05501
Degrees of Freedom: 9 Total (i.e. Null); 8 Residual
Null Deviance: 5.752
Residual Deviance: 5.69 AIC: 17.66
同上为model2
,model3
et.c.
答
小的解决方法,可以帮助
for (i in 22:36)
{
ivar <- repay[i] #choose variable for running the model
repay2 <- data.frame(Successful= repay$Successful, ivar) #create new data frame with 2 variables only for running the model
#run model for new data frame repay2
model<-glm(Successful~ ivar
,data=repay2
,family=binomial(link='logit'))
}
答
尝试使用formula
功能R.它可以让模型正确的解释如下:
for (i in 1:length(variables){
myglm <- glm(formula(paste("Successful", "~", variables[i])),
data = repay, family = binomial(link = 'logit'))
更多的东西,你可以在做见my post here这个背景。
也许'reconulate'会更直接。 – lmo