作者andrew43 (讨厌有好心推文後删文者)
看板R_Language
标题Re: [问题] 如何使用回圈跑变数命名
时间Thu Mar 29 17:37:50 2018
我建议不要生成10个物件,而改成以一个list来做,之後会好操作很多。
下面的例子做3次glm()
Y <- data.frame(
Y1 = rbinom(10000, 1, 0.1),
Y2 = rbinom(10000, 1, 0.5),
Y3 = rbinom(10000, 1, 0.9)
)
X <- data.frame(foo = rnorm(10000), bar = rnorm(10000))
fit <-
apply(
Y,
2,
FUN = function(this.Y) {
glm(this.Y ~ ., family = binomial, data = X)
}
)
# 接下来看看下面的code回传什麽
exp(coef(fit$Y1))
summary(fit$Y2)
predict(fit$Y3)
# 明白後可以利用lapply()或sapply()做工作了
sapply(fit, coef)
lapply(fit, function(this.fit) {
print(summary(this.fit))
})
sapply(fit, function(this.fit) {
predict(this.fit,
type = "response",
newdata = X)
})
※ 引述《ss12356tw (ss12356tw)》之铭言:
: [问题类型]:
: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
: [软体熟悉度]:
: 入门(写过其他程式,只是对语法不熟悉)
: [问题叙述]:
: 正在用logistic regression的function
: 但因为模型要重复跑9次
: 不知道该如何使用回圈处理变数命名的部分让程式码缩短
: 谢谢大家
: [程式范例]:
: ml_1=glm(group[,1]~.,data=data,family = "binomial")
: p_1=predict.glm(ml_1,newdata=pendigits.tst[,-17], type="response")
: ml_2=glm(group[,2]~.,data=data,family = "binomial")
: p_2=predict.glm(ml_2,newdata=pendigits.tst[,-17], type="response")
: ml_3=glm(group[,3]~.,data=data,family = "binomial")
: p_3=predict.glm(ml_3, newdata=pendigits.tst[,-17],type="response")
: ml_4=glm(group[,4]~.,data=data,family = "binomial")
: p_4=predict.glm(ml_4,newdata=pendigits.tst[,-17], type="response")
: ml_5=glm(group[,5]~.,data=data,family = "binomial")
: p_5=predict.glm(ml_5,newdata=pendigits.tst[,-17], type="response")
: ml_6=glm(group[,6]~.,data=data,family = "binomial")
: p_6=predict.glm(ml_6,newdata=pendigits.tst[,-17], type="response")
: ml_7=glm(group[,7]~.,data=data,family = "binomial")
: p_7=predict.glm(ml_7, newdata=pendigits.tst[,-17],type="response")
: ml_8=glm(group[,8]~.,data=data,family = "binomial")
: p_8=predict.glm(ml_8,newdata=pendigits.tst[,-17], type="response")
: ml_9=glm(group[,9]~.,data=data,family = "binomial")
: p_9=predict.glm(ml_9,newdata=pendigits.tst[,-17], type="response")
: 我将ml_1~9改成i
: 发现没办法处理命名的部分
: 想请问该如何修正
: 谢谢
: for(i in 1:9){
: ml_i=glm(group[,i]~.,data=data,family = "binomial")
: p_i=predict.glm(ml_i,newdata=pendigits.tst[,-17], type="response")
: }
: 跑出的错误:
: Error in as.data.frame.default(data, optional = TRUE) :
: cannot coerce class ""function"" to a data.frame
: [环境叙述]:
: 3.4.3
: [关键字]:
: 变数命名回圈
:
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.222.1
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1522316273.A.28E.html
※ 编辑: andrew43 (60.248.222.1), 03/29/2018 17:40:44
1F:推 ss12356tw: 谢谢,写的很清楚,感恩!! 03/29 20:20
2F:→ obarisk: 其实这个情况用for比较好, apply要处理model无法估计的 03/30 05:43
3F:→ obarisk: 问题 03/30 05:43
4F:→ andrew43: 对,是有点不方便。 03/30 07:51
5F:推 ss12356tw: 想请问如果改for怎麽写...比较困扰的是命名部分...for 04/02 01:48
6F:→ ss12356tw: 写不出来 04/02 01:48
7F:推 wenbuneatble: 想请教为何 list会比多物件还好 04/03 02:11
8F:→ obarisk: list比较好coding 04/03 10:15
9F:→ obarisk: outoutlist <- list() 04/03 10:16
10F:→ obarisk: for( i in seq(1, 3) ) { 04/03 10:17
11F:→ obarisk: outoutlist[[i]] <- lm() 04/03 10:18
12F:→ obarisk: } 04/03 10:18