8

bnlearn パッケージを使用して条件付き確率を計算しようとしていますが、ループ内で「cpquery」関数を使用すると問題が発生します。パッケージに含まれるデータを使用して、以下に示す例を作成しました。ループ内で cpquery 関数を使用すると、ループ内で作成された変数 (例では「evi」) が関数によって認識されません。次のエラーが表示されます。

Error in parse(text = evi) : object 'evi' not found

「evi」の作成手順は、著者が提供する例に基づいています。

あなたが提供できるどんな助けも素晴らしいでしょう。多数の観測に cpquery 関数を適用できる方法を見つけようと必死です。

library(bnlearn)
data(learning.test)
fitted = bn.fit(hc(learning.test), learning.test)

bn.function <- function(network, evidence_data) {
  a <- NULL
  b <- nrow(evidence_data)
  for (i in 1:b) {
    evi <- paste("(", names(evidence_data), "=='",
               sapply(evidence_data[i,], as.character), "')",
               sep = "", collapse = " & ")
    a[i] <- cpquery(network, (C=='c'), eval(parse(text=evi)))
  }
  return(a)
}

test <- bn.function(fitted, learning.test)

前もって感謝します!

4

3 に答える 3