Я вижу, что аналогичные вопросы задавались для других языков, но я не смог найти ответ для R.
Я пишу R-пакет с классом S3 под названием "Matrix".Объект этого класса представляет собой матрицу с некоторыми специфическими для приложения свойствами и универсальными методами для нее.Мне нужно работать с векторным представлением таких объектов, для чего я использую базовую функцию «as.vector».Проблема в том, что класс с именем "Matrix" определен в другом R-пакете, и для этого класса есть метод as.vector.Matrix, который, кажется, загружается при запуске.Это приводит к неправильной отправке метода, когда я вызываю as.vector для объектов моего класса "Matrix".
# using a prefix '#' for the class name in order to avoid a name conflict.
m1 <- structure(matrix(rnorm(4), 2, 2), class=c("#Matrix", "matrix"))
as.vector(m1)
[1] -0.2785165 -0.3832539 0.7353889 -0.6382483
# using class "Matrix" generates an error:
m2 <- structure(matrix(rnorm(4), 2, 2), class=c("Matrix", "matrix"))
as.vector(m2)
Error: not-yet-implemented method for coerce(<Matrix>, <character>).
->> Ask the package authors to implement the missing feature.
Для меня есть две проблемы с этой ошибкой: во-первых, во время написания пакета невозможно узнать, какие R-пакеты будут загружены вместе с ним.Это может вызвать случайные ошибки с пакетом из-за похожих конфликтов имен.Во-вторых, даже если бы был способ узнать о любых потенциальных конфликтах, изменение имен классов в моем пакете ради избежания таких конфликтов кажется излишним.