2

我在并行使用 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),所以我认为使用::运算符没有帮助。

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

4

1 回答 1

1

这与其他q & a有点相似,只是在这种情况下隐式调用print,而不是显式函数调用。正是这个print功能被掩盖了。

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

长话短说,这个sna包还有一个print.bn方法,用于class "bn"(biased net)的对象,正是这个函数掩盖了来自bnlearn.

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

于 2018-05-16T15:37:54.700 回答