我有问题要并行使用R包bnlearn
和sna
。以下示例很简单:
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
的输出),我认为使用::
运算符不会有所帮助。
我想知道问题是否掩盖了我无法真正影响的内部函数。任何帮助都会很棒!
答案 0 :(得分:1)
这有点类似于其他q & a's,除了在这种情况下存在对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"
(有偏见的网络)的对象,而这个功能可以掩盖来自bnlearn
的那个。
因此,如果您在sna
之后加载bnlearn
,您仍然可以通过明确使用bnlearn:::print.bn(a)
或重新定义print
方法print.bn <- bnlearn:::print.bn
来获得良好的打印效果,它应按预期打印。