掩蔽冲突:包bnlearn和sna
我在并行使用R包掩蔽冲突:包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 =
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.bnsna
也有一个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'