我试图使用标准随机方程从学生的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));
出现错误:&#39;非数字矩阵范围&#39;。
我记得过去使用as.data.frame()
将矩阵转换为数据框,并且工作得很顺利。即使有数字。不过,我已经失去了一段时间,而且似乎无法回想起或在网上找到解决这个问题的方法。我尝试了is.numeric()
,as.numeric()
,0而不是NA,但没有任何效果。
答案 0 :(得分:1)
正如罗兰所指出的,一个问题是,col似乎不是数字。请检查means是否是数据框或矩阵,例如STR(装置)。如果是,您的代码不应导致错误:'非数字矩阵范围'。
您的代码中还有其他一些问题。我创建了一个简化的示例,并指出了我在代码中找到的错误:
import 'modernizr';
import Modernizr from 'modernizr';
new Modernizr;
我希望这会有所帮助。 附:你不需要“;”在R
的每一行的末尾