Итак, я работаю над пакетом R, который использует классы S3, и было бы очень хорошо, если бы я мог использовать sample
как метод для одного из моих классов. Однако base
уже заявляет sample
как не S3 функции, так что я интересно это:Неплохой стиль для переопределения базовых функций, отличных от S3, как функции S3 в пакете R?
Является ли это плохой стиль переопределять не-S3 base
функции, такие как sample
как функции S3? И может ли это повредить пользователям моего пакета?
Путь можно переопределить sample
и по-прежнему держать base
функции работы является:
sample.default <- base::sample
sample <- function(x, ...) {
UseMethod("sample")
}
# This allows me to define a new sample method for my_special_class
sample.my_special_class <- function(...) {...}
Но что я уверен, является ли это вызовет какие-либо проблемы или пространство имен вопросы, например, при загрузке другие пакеты. Я также заметил, что не многие пакеты переопределить sample
, например, dplyr использует sample_n
и igraph использует sample_
, и я подумал, что может быть какая-то причина для этого ...
Если вы еще этого не сделали, возможно, вы можете придумать свой собственный класс и определить «sample.yourclassname» для обработки ваших классов. Таким образом, вы сохраняете согласованность использования общих функций. –
@ RomanLuštrik: Это не работает, потому что 'base :: sample' не является общим. Если это было общее, нет причин переопределять его в вашем пакете; вы просто зарегистрируете свой метод. –
@ JoshuaUlrich Бах, ты избил меня. Просто проверил функции за секунды до вашего сообщения. Ты прав. Вернуться к доске для рисования. –