1

使用pvclust::pvclust,我得到一个错误

solve.default(crossprod(X, X/vv)) 中的错误:Lapack 例程 dgesv:系统完全是奇异的:U[2,2] = 0 调用:... pvclust.merge -> lapply -> FUN -> msfit -> 解决 -> 解决.default 执行停止

即使是奇异矩阵我也不想停止分析crossprod(X, X/vv),所以我尝试插入一个if {...}pvclust::msfit来检查是否crossprod(X, X/vv)是奇异矩阵,matrixcalc::is.singular.matrix如果是,则返回NA并继续。

保存my.msfit.Rmsfit后,其中 包含if(!is.singular.matrix(...)) {...}else{...}原始内容pvclust::msfit

方法::insertSource('/myFuncDir/my.msfit.R',package="pvclust",functions='msfit')

但我在下面收到错误

分配错误(this,thisObj,envir = envwhere):无法更改“msfit”的锁定绑定的值此外:警告消息:在方法中::insertSource(文件名,包=“pvclust”,功能=“msfit”,:无法插入这些(在源代码中找不到):“msfit”

有什么解决办法吗?我应该要求pvclust包的作者吗?

==下面是发帖后补充的==

评论中给出了使用 try/catch 语法的准确建议,但我认为它不会给我解决方案。

关于我糟糕的英语水平,我提供了一个玩具样本来说明情况。

fun.a <- function(a1,a2,a3,a4){
  sum1 <- a1 + a2
  sum2 <- a2 + a3
  sum3 <- a3 + a4
  return(list(sum1,sum2,sum3))
 }

fun.a(1,2,3,'Char')

因为那sum3将是一个错误,所以fun.a(1,2,3,'Char')返回error

但是,我想回来

列表 [sum1, sum2, NaN]

如果我使用tryCatch(...,error=expr), sum1 到 sum3( 实际上,solve(...)in pvclust::msfit) 应该被包装。但是,fun.a( msfit) 是锁定包( pvclust) 的内部函数。

4

0 回答 0