R 掩码冲突:包 bnlearn 和 sna



我在并行使用 R 包bnlearnsna时遇到问题。以下示例很简单:

library(bnlearn)
data("asia")
# build network
a <- hc(asia)
# output
a

输出符合预期:

Bayesian network learned via Score-based methods
model:
[A][S][T][L|S][B|S][E|T:L][X|E][D|B:E] 
nodes:                                 8 
arcs:                                  7 
undirected arcs:                     0 
directed arcs:                       7 
average markov blanket size:           2.25 
average neighbourhood size:            1.75 
average branching factor:              0.88 
learning algorithm:                    Hill-Climbing 
score:                                 BIC (disc.) 
penalization coefficient:              4.258597 
tests used in the learning procedure:  77 
optimized:                             TRUE 

加载sna包后,我会收到完全不同的东西:

library(sna)
#output
a

我得到:

Biased Net Model
Parameters:
Error in matrix(c(x$d, x$pi, x$sigma, x$rho), ncol = 1) : 
'data' must be of a vector type, was 'NULL'

由于我并没有真正调用任何函数(只是想获取a的输出),我认为使用::运算符没有帮助。

我想知道问题是否是掩盖了我无法真正影响的内部功能。任何帮助都会很棒!

这有点类似于其他问答,只是在这种情况下有一个隐式调用print,而不是显式函数调用。正是这个print函数被屏蔽了。

要打印a,您可以在终端中键入a,也可以显式键入print(a)。为了获得bn对象的漂亮打印布局,作者编写了一个print方法,这就是键入aprint(a)时调度的方法。(要在没有此特定打印的情况下查看它,您可以使用print.default(a))。注意到class(a) == "bn",您可以查找print方法,方法是使用methods("print")或键入bnlearn:::print然后<tab>查看可用函数:这会导致(非导出)函数bnlearn:::print.bn

长话短说,sna包还有一个print.bn方法,用于class"bn"的对象(偏置网络),正是这个函数掩盖了bnlearn的对象。

因此,如果您在bnlearn后加载sna,您仍然可以通过显式使用bnlearn:::print.bn(a)或重新定义print方法print.bn <- bnlearn:::print.bn来获得漂亮的打印,并且它应该按预期打印。

相关内容

  • 没有找到相关文章

最新更新