0

簡単な例で私の問題を説明しましょう

分割表があります

datatable<-array(c(1,2,3,4,5,6,dim=c(3,2))
datatable<-cbind(datatable,rowSums(datatable))
datatable<-rbind(datatable,colSums(datatable))

ここでは、m=3,n=2 これは (m+1)x(n+1)=4x3 のテーブルです。ここで、新しい mxn 配列が必要です。ここで、ij 番目の入り口は、推定データテーブル [i,j] の信頼区間 (必要に応じてサイズ 2 のリスト) です。以下は、引数 a<-datatable[i,j] および b<-datatable[i,n+1] から推定 datatable[i,j] の間隔を計算する関数です。

CIfunction<-function(a,b) c(-1,1)+a*b

面倒すぎないことを願っています。もっと簡単な例は思いつきませんでした。

このようなテーブルをエレガントな方法で作成するにはどうすればよいですか? 実際の例では、これは任意の分割表を取り、対応する CI 表を返す関数です。

私はすでに二重ループを使用して方法を見つけました。j、しかし、mapply/outer などを使用してエレガントな方法で行うことができる何かのようなにおいがします。

4

2 に答える 2

0

以下のコードは、R がベクトルをリサイクルする方法に依存しているため、いくつかのトリッキーを含んでいます (R はどのような状況でリサイクルしますか? )。arrayオブジェクトは折り畳まれmatrixたベクトルです(列ごとに保存されます)。振る舞いを理解すれば、このようなトリックを考え出すのは難しくありません

datatable <- array (1:6, dim=c(3,2))
datatable <-cbind(datatable,rowSums(datatable))
datatable <-rbind(datatable,colSums(datatable))

# last column recycled as necessary
lower <- -datatable[1:3, 1:2] * datatable[1:3, 3]  
upper <- -lower
CIlist <- list(lower, upper)

datatableただし、行と列の合計なしで保存し、印刷時にのみ計算することをお勧めします。

于 2014-10-14T14:48:53.937 に答える