Это несколько похоже на другие вопросы и ответы , за исключением того, что в этом случае есть неявный вызов 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
, и этодолжен печатать как положено.