R 屏蔽冲突:包 bnlearn 和 sna
R masking conflict: packages bnlearn and sna
我在并行使用 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
的输出),所以我认为使用 ::
运算符没有帮助。
我想知道问题是不是屏蔽了一个我无法真正影响的内部函数。任何帮助都会很棒!
这与其他 q & a's 有点相似,只是在这种情况下有对 print
的隐式调用,而不是显式函数调用。正是这个 print
函数被屏蔽了。
要打印 a
,您可以在终端中键入 a
,或者直接键入 print(a)
。为了获得 bn
对象的漂亮打印布局,作者编写了一个 print
方法,这就是在键入 a
或 print(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
,它应该按预期打印。
我在并行使用 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
的输出),所以我认为使用 ::
运算符没有帮助。
我想知道问题是不是屏蔽了一个我无法真正影响的内部函数。任何帮助都会很棒!
这与其他 q & a's 有点相似,只是在这种情况下有对 print
的隐式调用,而不是显式函数调用。正是这个 print
函数被屏蔽了。
要打印 a
,您可以在终端中键入 a
,或者直接键入 print(a)
。为了获得 bn
对象的漂亮打印布局,作者编写了一个 print
方法,这就是在键入 a
或 print(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
,它应该按预期打印。