簡體   English   中英

如何處理R中的“非數字矩陣范圍”錯誤?

[英]How to counter the 'non-numeric matrix extent' error in R?

我正在嘗試使用標准隨機方程從學生的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,但沒有任何效果。

正如羅蘭所指出的,一個問題是,col似乎不是數字。 請檢查means是否是數據框或矩陣,例如str(均值)。 如果是,您的代碼不應導致錯誤:'非數字矩陣范圍'。

您的代碼中還有其他一些問題。 我創建了一個簡化的示例,並指出我在代碼中發現的錯誤:

library(MASS)
library(LearnBayes)

means <- cbind(c(1,2,3),c(4,5,6))
chi <- 10

matgen<-function(means,chi,covariancematrix)
{
  cols <- ncol(means) # if means is a dataframe or matrix, this should work

  normals <- rnorm(n=20,mean=100,sd=10) # changed example for simplification
  # normals<-mvrnorm(n=20,mu=means,Sigma = covariancematrix) 
  # input to mu of mvrnorm should be a vector, see ?mvrnorm; but this means that ncol(means) is always 1 !?

  invgammas<-rigamma(n=20,a=chi/2,b=chi/2) # changed alpha= to a and beta= to b

  gen<-as.data.frame(matrix(data=NA,ncol=cols,nrow=20))

  i<-1
  while(i<=20)
  {
    gen[i,]<-t(means)+normals[i]*sqrt(invgammas[i]) # changed normals[i,] to normals [i], because it is a vector
    i<-i+1 # changed <= to <- 
  }
  return(gen)
}

matgen(means,chi,covariancematrix)

我希望這有幫助。 PS你不需要“;” 在R的每一行的末尾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM