掩蔽冲突:包bnlearn和sna

掩蔽冲突:包bnlearn和sna,r,sna,bnlearn,R,Sna,Bnlearn,我在并行使用R包bnlearn和sna时遇到问题。以下示例非常简单: library(bnlearn) data("asia") # build network a <- hc(asia) # output a 一旦我加载了sna包,我就会收到完全不同的东西: library(sna) #output a 我得到: Biased Net Model Parameters: Error in matrix(c(x$d, x$pi, x$sigma, x$rho), ncol =

我在并行使用R包
bnlearn
sna
时遇到问题。以下示例非常简单:

library(bnlearn)
data("asia")

# build network
a <- hc(asia)

# output
a
一旦我加载了
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
的输出),因此我认为使用
操作符没有帮助


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

这与其他类似,只是在本例中存在对
print
的隐式调用,而不是显式函数调用。正是这个
print
函数被屏蔽了

要打印
a
,您可以在终端中键入
a
,也可以显式键入
print(a)
。为了获得
bn
对象的良好打印布局,作者编写了一个
print
方法,这是在键入
a
print(a)
时发送的。(要查看它而不进行此特定打印,可以使用
print.default(a)
)。注意到
类(a)=“bn”
后,您可以使用
方法(“print”)
或键入
bnlearn::print
,然后键入
查看可用的函数,以查找
print
方法:这将产生一个(未导出的)函数
bnlearn:::print.bn

长话短说,
sna
包也有一个
print.bn
方法,用于
类的对象
“bn”
(偏置网络),正是这个函数屏蔽了
bnlearn


因此,如果在
bnlearn
之后加载
sna
,您仍然可以通过显式使用
bnlearn::print.bn(a)
或重新定义
print
方法
print.bn
sna
也有一个
print.bn
方法来获得良好的打印效果。因此,您可以显式调用
bnlearn:::print.bn(a)
(ps您可以通过查看
class(a)
,了解可能调用的
print
方法,这将导致
print.bn
。然后查看
sna
,查看它是否也有
print.bn
方法)
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'