Re: [問題] 如何使用迴圈跑變數命名

看板R_Language作者 (討厭有好心推文後刪文者)時間7年前 (2018/03/29 17:37), 7年前編輯推噓3(309)
留言12則, 4人參與, 7年前最新討論串2/2 (看更多)
我建議不要生成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://www.ptt.cc/bbs/R_Language/M.1522316273.A.28E.html ※ 編輯: andrew43 (60.248.222.1), 03/29/2018 17:40:44

03/29 20:20, 7年前 , 1F
謝謝,寫的很清楚,感恩!!
03/29 20:20, 1F

03/30 05:43, 7年前 , 2F
其實這個情況用for比較好, apply要處理model無法估計的
03/30 05:43, 2F

03/30 05:43, 7年前 , 3F
問題
03/30 05:43, 3F

03/30 07:51, 7年前 , 4F
對,是有點不方便。
03/30 07:51, 4F

04/02 01:48, 7年前 , 5F
想請問如果改for怎麼寫...比較困擾的是命名部分...for
04/02 01:48, 5F

04/02 01:48, 7年前 , 6F
寫不出來
04/02 01:48, 6F

04/03 02:11, 7年前 , 7F
想請教為何 list會比多物件還好
04/03 02:11, 7F

04/03 10:15, 7年前 , 8F
list比較好coding
04/03 10:15, 8F

04/03 10:16, 7年前 , 9F
outoutlist <- list()
04/03 10:16, 9F

04/03 10:17, 7年前 , 10F
for( i in seq(1, 3) ) {
04/03 10:17, 10F

04/03 10:18, 7年前 , 11F
outoutlist[[i]] <- lm()
04/03 10:18, 11F

04/03 10:18, 7年前 , 12F
}
04/03 10:18, 12F
文章代碼(AID): #1QlBFnAE (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1QlBFnAE (R_Language)