使用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
) 的内部函数。