2012-03-28 4 views
0

を変更します。具体的には、私はこのようなコードを持っている:保存モデル(例えば、LM)は、私がリストにLMモデルを格納し、その結果を抽出するために、特定のモデルにアクセスするために、ループを使用したいのですそのクラス

model1 <- lm(dv ~ group,data=df,na.action=na.omit) 
model2 <- lm(dv ~ cov + group,data=df,na.action=na.omit) 
model3 <- lm(dv ~ group,data=df_out,na.action=na.omit) 
model4 <- lm(dv ~ cov + group,data=df_out,na.action=na.omit) 

lom <- list(main=model1,main_cov=model2,main_out=model3, main_cov_out=model4) 

for (x in c(1:length(lom))) { 
    for (y in c(1:length(lom[[x]]))) { 
     modl <- lolom[[x]][y] 
     class(modl) <- "lm" 
     anov <- Anova(modl,type="II") # (from Car package) 
     } # (y in c(1:length(lom[[x]]))) 
    } # (x in c(1:length(lom))) 

をこのエラーが出る... terms.defaultで

エラー(オブジェクト):加えていない用語のコンポーネントや属性 :警告メッセージ: ではあります.n(coef(mod)): is.n()タイプ 'NULL'の非(リストまたはベクトル)に適用

私は "modl"のクラスをチェックしました。 Anovaがlmオブジェクトに含まれるすべての関連情報にアクセスできるようになることを望むクラスを変更するが、役に立たない。名前を確認し、modlオブジェクトのさまざまなレベルにアクセスすることで、オブジェクト全体がリストに実際に格納されていることが分かりました(たとえば、modl $ model)。

答えて

1

(あなたが本当に平均LOM [[X] [Y]とlolomがタイプミスであると仮定。)

あまりにも多くのループ?

あなたはそれは、リストの各エントリで、各モデルに分散分析を実行したい:

for (x in 1:length(lom)) { 
    modl <- lom[[x]] 
    # etc 
} 
3

たぶんlapply(lom, Anova,type="II")

、あなたはすべてのオブジェクトのリストが必要な場合:

lapply(lom, function(x) lapply(seq_along(names(x)), function(i) x[i])) 
+0

はありがとうございます。私が二重埋め込み式のラップに従うのは難しいですが、この反応は私のために物事を開いてくれました。具体的には、最終的にループの代わりにどのようにlapplyを使うべきかを知っており、私にとって可能な動的コーディングのレベルが一桁増加しました。 – dmac

+0

私は何も忘れてしまったのですが、実際にlist()を呼び出すときにオブジェクトのモードが変更された理由についての質問に実際には触れませんか? – WillZ

関連する問題