1

を使用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::msfitcrossprod(X, X/vv)matrixcalc::is.singular.matrixNA

オリジナルに挿入された my.msfit.Rを保存した後、msfitif(!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) の内部関数です。

4

0 に答える 0