【发布时间】:2016-12-11 17:15:01
【问题描述】:
我正在尝试使用标准随机方程从学生的 t 分布中生成模拟值的数据框。我使用的函数如下:
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(), 0s 而不是 NA,但没有任何效果。
【问题讨论】:
-
我认为问题在于
cols不是数字。但是,您没有显示如何调用该函数,尤其是传递给means的内容。 PS:当你可以使用for循环时使用while循环只是效率低下。但我认为你根本不需要循环。 -
@Roland 感谢您的帮助!我使用
covariancematrix来获取该维度,现在它可以工作了!只是为了帮助我学习,你能解释一下为什么你认为我根本不需要循环吗?