R掩蔽冲突:包bnlearn和sna

时间:2018-05-16 08:27:48

标签: r sna bnlearn

我有问题要并行使用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的输出),我认为使用::运算符不会有所帮助。

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

1 个答案:

答案 0 :(得分:1)

这有点类似于其他q & a's,除了在这种情况下存在对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的那个。

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