如何使用 r 中的 S4 类输出进行代数计算,as.bob()

问题描述

在这里问了一个问题:
enter link description here


从那里我了解了 as.brob() 函数
它帮助我避免在将 e 提高到非常大的数字时变得无穷大。 (我将在我编写的代码中使用 exp(as.brob()) 。
现在我的问题是,由于我要调用我的函数并为其提供输入并获得实数输出,因此它给了我一个 S4 类错误
我怎样才能从 exp(as.brob)) 得到一个真正的值输出

下面是矩阵法线密度函数

   dMnorm <- function(Y,Mu,Sigma,Psi,Sigma.inv = NULL,Psi.inv = NULL,Sigma.det = NULL,Psi.det = NULL){   
  if (is.null(Sigma.inv)) Sigma.inv <- solve(Sigma)   
  if (is.null(Psi.inv)) Psi.inv <- solve(Psi)   
  if (is.null(Sigma.det)) Sigma.det <- det(Sigma)     
  if (is.null(Psi.det)) Psi.det <- det(Psi)    
  p <- dim(Y)[1] 
  Tt <- dim(Y)[2]     
  den <- ((2 * pi)^((-1)* p * Tt / 2)) * (Sigma.det^((-1)* Tt / 2)) * (Psi.det^((-1)* p / 2)) *
  exp(-1 / 2 * sum(diag(Sigma.inv %*% (Y - Mu) %*% Psi.inv %*% t(Y - Mu)))***)

#cat("dens",den,"\n")
return(den)
}

上面函数的第 9 行是我得到非常小的地方(一个非常大的数字的倒数)。为此我被引导使用 as.brob(),所以我将这部分更改为

1/exp(as.brob(1 / 2 * sum(diag(Sigma.inv %*% (Y - Mu) %*% Psi.inv %*% t(Y - Mu))))***)

但是当我想使用我的函数 dMnorm() 时,我得到:
**Phi.vector[i] 中的错误,我将不胜感激。
ps,不用说,LaplacesDemon 包中的 dmatrixnorm() 在这里不起作用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)