を使用pvclust::pvclust
すると、エラーが発生しました
solve.default(crossprod(X, X/vv)) のエラー: Lapack ルーチン dgesv: システムは厳密に特異です: U[2,2] = 0 呼び出し: ... pvclust.merge -> lapply -> FUN -> msfit -> solve -> solve.default 実行停止
crossprod(X, X/vv)
特異行列であっても解析を止めたくないので、で特異かどうかを調べるif {...}
ブロックを に挿入してみました。pvclust::msfit
crossprod(X, X/vv)
matrixcalc::is.singular.matrix
NA
オリジナルに挿入された my.msfit.Rを保存した後、msfit
if(!is.singular.matrix(...)) {...}else{...}
pvclust::msfit
Methods::insertSource('/myFuncDir/my.msfit.R',package="pvclust",functions='msfit')
しかし、私は以下のエラーを得ました
assign(this、thisObj、envir = envwhere) のエラー: 'msfit' のロックされたバインドの値を変更できません。さらに: 警告メッセージ: In Methods::insertSource(filename, package = "pvclust", functions = "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(...)
内pvclust::msfit
) をラップする必要があります。ただし、fun.a
( msfit
) はロックされた package( pvclust
) の内部関数です。