Определите, какая функция вызвана родовой функцией

Действительно необходимо использовать инструмент синхронизации файлов, как SyncBackSE, SyncToy мс, или даже что-то как , WinMerge добьется цели. Я предпочитаю SyncBack, поскольку он позволяет Вам устанавливать очень явные правила для примерно каждого возможного случая и конфликта, по крайней мере, больше, чем другие два. С любым из них Вы не должны будете продолжать нажимать все всплывающие окна, и можно проверить без сомнения, что место назначения является точно тем же как источником.

5
задан abyx 23 November 2009 в 20:51
поделиться

3 ответа

Вы можете найти все соответствующие общие функции для класса S3, используя методы (). Итак, в вашем случае:

methods(class=fv)
3
ответ дан 15 December 2019 в 01:03
поделиться

Это ясно описано в справке к UseMethod .

Когда функция, вызывающая UseMethod ("fun") , применяется к объекту с class attribute c ("first", "second") , система ищет функцию с именем fun.first и, если она ее находит, применяет ее к объекту. Если такой функции не найдено, пробуется функция с именем fun.second . Если имя класса не создает подходящую функцию, используется функция fun.default , если она существует, или возникает ошибка.

Таким образом, если вы ищете подходящую функцию, вам необходимо проверить все возможности, например .:

fun_seeker <- function(obj,fun) {
  funs_to_check <- paste(fun,c(class(obj),"default"),sep=".")
  funs_exists <- funs_to_check %in% methods(fun)
  if (any(funs_exists)) funs_to_check[funs_exists][1] else stop("No applicable method")
}
fun_seeker(matrix(rnorm(100),10),"plot")
fun_seeker(matrix(rnorm(100),10),"summary")
1
ответ дан 15 December 2019 в 01:03
поделиться

В данном случае мы имеем дело с классом S3. (Это более старый и простой объектно-ориентированный стиль.) Это означает, что когда вы набираете plot (K) для объекта с классом «fv» «data.frame» , R делает следующее:

Он просматривает путь поиска, чтобы найти функцию с именем plot . Введите search () , чтобы узнать, куда смотрит R. Предполагая, что вы не сделали чего-то глупого, например, определения собственной функции построения графика, она должна найти версию в пакете graphics .

Эта функция имеет особую логику для работы с входом, где x - это функция, затем вызывает UseMethod .

UseMethod просматривает путь поиска функции с именем plot.fv и вызывает ее, если находит ее .

В противном случае он ищет plot.data.frame .

В противном случае он ищет plot.default .

Если бы это не могло быть найдено, была бы выдана ошибка . (Хотя plot.default существует в графическом пакете, поэтому вам придется очень постараться, чтобы получить здесь ошибку.)

0
ответ дан 15 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: