【发布时间】:2013-10-16 03:16:06
【问题描述】:
我正在尝试使用 bnlearn package 来计算条件概率,但在循环中使用 "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)
提前致谢!
【问题讨论】:
-
我已经与 bnlearn 包的作者联系,我收到的错误似乎是由于 cpquery 函数的范围问题。当我能够让 cpquery 函数在用户定义函数的 outside 构造的 for 循环中正常工作时,这一点很明显,但是当相同的 for 循环是在用户定义函数的内部中使用。
-
我在循环中遇到了与 cpquery 类似的问题,一个对我有用的快速解决方法是在 cpquery 调用之前包含一行
evi <<- evi。这定义了全局环境中的变量。 -
我想你的问题在这里解决了:stackoverflow.com/questions/44676501/…
标签: r probability bayesian-networks