2017-02-05 4 views
1

私は答えを探すが、私が探しているものは提供していない。私はいくつかのシンプルなモデルを実行しており、結果(LRTを主に)をテーブルやマトリックスに入れようとしているので、それらをより良く提示できます。しかし、そのためのコマンドは私にそれをさせません。それは他のプログラミング言語がそれを非常に簡単に行うことを考えると奇妙です。モデルからの結果を行列に格納する

最後の文では、[j]か何かを代用すると、オブジェクトaが見つかりません。どのように私はこれを上書きすることができますか?ありがとうございました。

li<-array(c(716, 207,79,25,819,186,67,22), c(2,2,2)) 
dimnames(li)<-list(c("Normal","High"),c("N BP", "H BP"),c("A","B")) 
#General Model with three variables and no interactions. 
a1<-loglin(li,list(1,2,3)) 
#Model with XY,Z 
a2<-loglin(li,list(c(1,2),3)) 
#Model with XZ,Y 
a3<-loglin(li,list(c(1,3),2)) 
#Model with X,ZY 
a4<-loglin(li,list(c(2,3),1)) 
#Model with XY,XZ 
a5<-loglin(li,list(c(1,2),c(1,3))) 
#Model with YZ,XZ 
a6<-loglin(li,list(c(2,3),c(1,3))) 
#Model with XY,ZY 
a7<-loglin(li,list(c(1,2),c(2,3))) 

tabi<-matrix(data=c(0),nrow=10,ncol=2) 
for (j in 1:7) { 
    i<-j 
tabi[i,1]<-a[i]$lrt 
} 

サイドノート。私は "ai"、 "aj"、 "a"などの文章を書こうとしましたが、それはうまくいきません。

+0

は '[1]'私はすべての異なる組み合わせと試み、それが動作しない、ということを知っているa1' – user20650

+0

'と同じではありません。 – Ahmir

答えて

1

と同じではないということです、ここでは以下を含み、もっと簡単な方法がありますコーディング:

基本的にリストを作成し、[[]]を追加してモデルをリストとして定義するだけです。コードを定期的に実行してください。

a<-list() 
#General Model with three variables and no interactions. 
a[[1]]<-loglin(li,list(1,2,3)) 
#Model with XY,Z 
a[[2]]<-loglin(li,list(c(1,2),3)) 
#Model with XZ,Y 
a[[3]]<-loglin(li,list(c(1,3),2)) 
#Model with X,ZY 
a[[4]]<-loglin(li,list(c(2,3),1)) 
#Model with XY,XZ 
a[[5]]<-loglin(li,list(1:2,1:3)) 
#Model with YZ,XZ 
a[[6]]<-loglin(li,list(2:3,1:3)) 
#Model with XY,ZY 
a[[7]]<-loglin(li,list(1:2,2:3)) 

tabi<-matrix(data=c(0),nrow=10,ncol=2) 

for (j in 1:7) { 
    i<-j 
tabi[i,1]<-a[[j]]$pearson 
} 
3

これらのモデルがすべてワークスペースにある場合は、mgetを抽出してリストを返し、これをループしてlrtを抽出することができます。あなたの例のためにそう

mget(ls(pattern="a\\d"))が抽出し、このリストをグローバルなパターンでのenv a数、および sapplyループからのデータをつかむ

sapply(mget(ls(pattern="a\\d")), "[", "lrt") 

代替ワークフローとして、多くのモデルをワークスペースに浮かべるのではなく、モデルをリストに格納することができます。

したがって、リスト内のパラメータ

para <- list(list(1,2,3), list(c(1,2),3), list(c(1,3),2)) 

モデル

lst <- lapply(para, function(x) loglin(li, x)) 

これはlstの各モデルを記憶する印加これらをループそして保存。あなたはこのアイテムをほしいと思うならば、上記のloglin(li, x)$lrtを使うことができます。それ以外の場合は、以前と同じようにループして抽出することができます。

sapply(lst, "[", "lrt") 

あなたのコードに関する注意a[1]は単純な答えをしたいと私と同じように持っていた人のためにa1

+1

ありがとうございます。私はこれを代替案と考えています。 – Ahmir

0

は、連結するペーストを使用することはできますし、あなたのループでiの値を文字列としてA1、A2、A3などを取得し、その後、evalを使用して、変数として、それを評価するために解析します。

tabi<-matrix(data=c(0),nrow=10,ncol=2) 
for (i in 1:7) { 

    tabi[i,1]<-eval(parse(text = paste("a",i,sep="")))$lrt 

} 
関連する問題