私は標準的な確率方程式を使って生徒のt分布からシミュレートされた値のデータフレームを生成しようとしています。次のように私が使用する機能は次のとおりです。Rの '非数値行列のエクステント'エラーに対処するには?
matgen<-function(means,chi,covariancematrix)
{
cols<-ncol(means);
normals<-mvrnorm(n=500,mu=means,Sigma = covariancematrix);
invgammas<-rigamma(n=500,alpha=chi/2,beta=chi/2);
gen<-as.data.frame(matrix(data=NA,ncol=cols,nrow=500));
i<-1;
while(i<=500)
{
gen[i,]<-t(means)+normals[i,]*sqrt(invgammas[i]);
i<=i+1;
}
return(gen);
}
それは明らかではない場合、私は列と500行のcolsの数に値をとる空のデータフレームを、作成しようとしています。値はもちろん、数値であり、Rは、9行であることを私に伝えます:「非数値行列の範囲」:
gen<-as.data.frame(matrix(data=NA,ncol=cols,nrow=500));
エラーがあります。
これまではas.data.frame()
を使用して行列をデータフレームに変換していましたが、それは非常にスムーズに機能しました。数字でさえ。私はしばらくの間は触れられておらず、この問題の解決策をオンラインで見つけ出すことはできません。 NAの代わりにis.numeric()
、as.numeric()
、0を試しましたが、何も機能しません。
私は問題が 'cols'が数値ではないと信じています。しかし、あなたは関数をどのように呼び出すか、特に '手段 'に渡すものを示していません。 PS: 'for'ループを使うことができるときに' while'ループを使うのは非効率です。しかし、私はループが必要ないとは思わない。 – Roland
@Rolandあなたの助けをありがとう!私は '共分散行列(covariancematrix) 'を使ってその次元を取り出しました。私が学ぶのを助けるために、私はループが必要ないと思う理由を説明できますか? –