如何对抗非数字矩阵范围' R中的错误?

时间:2016-08-05 10:11:31

标签: r matrix dataframe

我试图使用标准随机方程从学生的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,但没有任何效果。

1 个答案:

答案 0 :(得分:1)

正如罗兰所指出的,一个问题是,col似乎不是数字。请检查means是否是数据框或矩阵,例如STR(装置)。如果是,您的代码不应导致错误:'非数字矩阵范围'。

您的代码中还有其他一些问题。我创建了一个简化的示例,并指出了我在代码中找到的错误:

import  'modernizr'; 

import Modernizr from 'modernizr'; 
new Modernizr;

我希望这会有所帮助。 附:你不需要“;”在R

的每一行的末尾