표준 확률 방정식을 사용하여 학생의 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);
}
을가 명확하지 않으면, 내가 COLS 열 수 500 행에 값을 취 빈 데이터 프레임을 만들려고 해요 다음과 같이 내가 사용하는 기능입니다. 값은 물론 숫자이며, R은 9 번째 행에 다음과 같이 표시합니다.
gen<-as.data.frame(matrix(data=NA,ncol=cols,nrow=500));
'숫자가 아닌 행렬 범위'오류가 있습니다.
이전에 행렬을 데이터 프레임으로 변환하기 위해 as.data.frame()
을 사용한 것을 기억하며 매우 원활하게 작동했습니다. 숫자조차도. 나는 잠시 동안 연락을하지 못했고 온라인에서이 문제에 대한 해결책을 생각하거나 찾지 못하는 것 같습니다. 나는 is.numeric()
, as.numeric()
, NA 대신 0을 시도했지만 아무것도 작동하지 않습니다.
나는'cols'가 숫자가 아니라고 생각한다. 그러나 함수를 호출하는 방법, 특히 '수단'에 전달하는 함수는 표시하지 않습니다. 추신 :'while' 루프를 사용할 수있을 때'for' 루프를 사용하는 것은 비효율적입니다. 그러나 나는 당신이 루프를 전혀 필요로하지 않는다고 생각합니다. – Roland
@Roland 귀하의 도움에 감사드립니다! 그 차원을 가져 오기 위해'공분산 매트릭스 (covariancematrix) '를 사용했고, 이제는 작동합니다! 내가 배우는 것을 돕기 위해 왜 내가 루프가 필요 없다고 생각하는지 설명 할 수 있겠습니까? –