#r
#r
Вопрос:
Я мог бы поклясться, что я искал эту тему еще когда-то и что-то нашел, но я не могу найти это решение — так что извиняюсь, если это повторение.
Когда вы добавляете свой собственный универсальный метод к существующему методу S3, встроенному в R (например, print, summary и т. Д.), Но вам нужно что-то добавить в отправку метода, как это работает? Так, например, если print
бы не было многоточия (и, возможно, некоторых других параметров), могу ли я просто сделать что-то подобное (и поддерживать все другие общие методы, которые были у print .)
print <- function(x, new_param_one, new_param_two, ...) {
UseMethod("print")
}
print.crazy_obj <- function(x, ect, ...) {
#STUFF
}
А затем print.data.frame и все другие общие методы все равно будут существовать? Или каков наилучший способ сделать это? Спасибо!
Ответ №1:
Непонятно, почему вы хотели бы перезаписать универсальный. В вашем вопросе вы говорите
Так, например, если в print не было многоточия
Но все универсальные методы S3 имеют многоточие (по крайней мере, я не могу придумать или найти какие-либо, которые этого не делают). Именно многоточие обеспечивает функциональность, которую вы ищете.
Предположим, у вас есть функция, которая создает новый класс:
crazy_obj <- function(x) structure(x, class = "crazy_obj")
y <- crazy_obj("biscuit")
Вы можете присвоить print.crazy_obj
методу любые параметры, которые вам нравятся; они будут переданы из универсального через многоточие:
print.crazy_obj <- function(x, n = 1, ...) print(paste(rep("crazy", n), x))
Итак, теперь мы можем сделать:
print(y)
#> [1] "crazy biscuit"
print(y, 4)
#> [1] "crazy biscuit" "crazy biscuit" "crazy biscuit" "crazy biscuit"