R bnlearn eval 内部函数

标签 r bayesian bnlearn

我正在使用 R 中的 bnlearn 包来训练贝叶斯网络。我在使用以下代码时遇到了麻烦(稍微修改了 bnlearn 示例代码):

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

myfuncBN=function(){

  var = names(learning.test)
  obs = 2
  str = paste("(", names(learning.test)[-3], "=='",
          sapply(learning.test[obs,-3], as.character), "')",
          sep = "", collapse = " & ")
  str2 = paste("(", names(learning.test)[3], "=='",
           as.character(learning.test[obs, 3]), "')", sep = "")
  cpquery(fitted, eval(parse(text = str2)), eval(parse(text = str)))
}

myfuncBN()

此代码引发错误:

结束时出错:无法将类型“闭包”强制转换为“字符”类型的向量

但是,如果 str 和 str2 是在函数 myfuncBN() 之外定义的,则它有效。
有谁知道这是什么原因?

最佳答案

这是该问题的解决方案:

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

myfuncBN=function() {
  vars = names(learning.test)
  obs = 2
  str1 = paste("(", vars[-3], "=='",
          sapply(learning.test[obs,-3], as.character), "')",
          sep = "", collapse = " & ")
  str2 = paste("(", vars[3], "=='",
           as.character(learning.test[obs, 3]), "')", sep = "")

  eval(parse(text=paste("cpquery(fitted,",str2,",",str1,")")))
}

set.seed(1)
myfuncBN()

# [1] 0.05940594

该值等于以下给出的结果:
set.seed(1)
cpquery(fitted, event=(C=="c"), 
             evidence=((A=="b") & (B=="a") & (D=="a") & (E=="b") & (F=="b")))

# [1] 0.05940594

关于R bnlearn eval 内部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44676501/

相关文章:

php - 给定一天中的时间,纬度和经度的太阳位置在php中

R Paste() 命令和向量

r - 如何使用 R 在一个面板中绘制贝叶斯先验分布和后验分布?

r - BNlearn R 错误 “variable Variable1 must have at least two levels.”

python - 将任何函数从 R 包导入到 python 中

r - R : variable is not supported in bnlearn (type: integer) 中 bn.fit() 的数据类型错误

r - 在另一列的字符串中搜索一列中的文本

R:改进工作流程并跟踪输出

python - MCMC 中的参数数量

r - stan 中的多项式模型 - 如何拟合狄利克雷分布参数?