gpt4 book ai didi

r - 如何应对 R 中的 'non-numeric matrix extent' 错误?

转载 作者:行者123 更新时间:2023-12-04 03:36:43 25 4
gpt4 key购买 nike

我正在尝试使用标准随机方程从学生的 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 那里,但没有任何作用。

最佳答案

正如 Roland 指出的那样,一个问题是 col 似乎不是数字。请检查手段是数据框还是矩阵,例如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)

我希望这有帮助。
附言你不需要“;”在 R 中每一行的末尾

关于r - 如何应对 R 中的 'non-numeric matrix extent' 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38786685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com