2017-11-29 3 views
0

転用後にRにループを書き込もうとしています。帰属は10のデータセットを帰し、それぞれのデータセットで同じモデルを実行し、各データセットの結果のスコアを予測したい。私の現在のコードは動作しません:同じモデルを10回実行するためにforループを作成する

for (i in 1:10) { 
impi <- glm(died ~ agecat + female_1 + insurance + mech + transfer + 
      iss + mxaisbr1 + maxais + cm_chf_1 + cm_mets_1 + cm_liver_1 + 
      cm_htn_c_1 + cm_bldloss_1 + state, data = subset(imp, .imp == i), family = binomial) 
preimpi <- predict(impi, type = c('response')) 
} 

ループがなければ、私は10回

imp1 <- glm(died ~ agecat + female_1 + insurance + mech + transfer + 
      iss + mxaisbr1 + maxais + cm_chf_1 + cm_mets_1 + cm_liver_1 + 
      cm_htn_c_1 + cm_bldloss_1 + state, data = subset(imp, .imp == 1), family = binomial) 
preimp1 <- prediect(imp1, type = c('response')) 
imp2 <- glm(died ~ agecat + female_1 + insurance + mech + transfer + 
      iss + mxaisbr1 + maxais + cm_chf_1 + cm_mets_1 + cm_liver_1 + 
      cm_htn_c_1 + cm_bldloss_1 + state, data = subset(imp, .imp == 2), family = binomial) 
preimp2 <- prediect(imp2, type = c('response')) 
etc... 

任意のアイデアのために同じコードを入力する必要がありますか?ありがとう!

+0

これを行うための最も効率的な方法は、データセット(あなたの10個のデータセット)のリストを作成することであると 'dplyr'と' purrr'パッケージを使用して、各データセットのモデルを実行します。ここでいくつかの情報を見つけることができます:https://drsimonj.svbtle.com/running-a-model-on-separate-groups – AntoniosK

+0

しかし、forループには何も問題ありません。各反復で 'preimpi'を上書きするようです。 – AntoniosK

+0

ありがとう! preimpiを上書きできないかどうか知っていますか?私のforループコードの出力は、imp1-imp10とpreimp1-preimp10の代わりにimpiとpreimpiです。 – mandy

答えて

3

一つの解決策は、リストのインデックスを作成するための二重括弧の使用は、例えば、

impi = list() 
preimpi = list() 
for (i in 1:10) { 
    impi[[i]] <- glm(died ~ agecat + female_1 + insurance + mech + 
       transfer + iss + mxaisbr1 + maxais + cm_chf_1 + 
       cm_mets_1 + cm_liver_1 + cm_htn_c_1 + cm_bldloss_1 + 
       state, data = subset(imp, .imp == i), family = binomial) 
    preimpi[[i]] <- predict(impi[[i]], type = c('response')) 
} 

注、リストとしてIMPIとpreimpiを初期化することです。

編集:これは、上記の例と同じ出力を生成する必要がある、予測行にlapplyを使用する代替方法です。

impi = list() 
for (i in 1:10) { 
    impi[[i]] <- glm(died ~ agecat + female_1 + insurance + mech + 
       transfer + iss + mxaisbr1 + maxais + cm_chf_1 + 
       cm_mets_1 + cm_liver_1 + cm_htn_c_1 + cm_bldloss_1 + 
       state, data = subset(imp, .imp == i), family = binomial) 
} 
preimpi = lapply(impi, FUN = predict, type = "response") 
関連する問題