R 屏蔽冲突:包 bnlearn 和 sna

R masking conflict: packages bnlearn and 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 的输出),所以我认为使用 :: 运算符没有帮助。

我想知道问题是不是屏蔽了一个我无法真正影响的内部函数。任何帮助都会很棒!

这与其他 q & a's 有点相似,只是在这种情况下有对 print 的隐式调用,而不是显式函数调用。正是这个 print 函数被屏蔽了。

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

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

中的那个

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