Переопределить ? (справка) функция для определенных классов

#r

#r

Вопрос:

Возможно ли переопределить ? функцию (справочную функцию) для R-класса?

Я попытался определить

 `?.myclass` = function(x) "foo"
help.myclass = function(x) "foo"
  

но это не меняет поведение ? .

 f = function() "bar"
class(f) = "myclass"
?f                   # doesn't work
help(f)              # doesn't work
help.myclass(f)      #works
  

Я пишу пакет, который использует PythonInR для импорта некоторых функций Python. Я надеялся, что смогу добавить класс к импортированным функциям Python, который позволил бы мне создать пользовательскую справочную функцию, вызываемую help(fun) на Python, и распечатать результаты. Я могу написать python.help функцию, которая делает это, но я надеялся на более простое решение.

Ответ №1:

Вы могли бы попробовать что-то вроде следующего:

 library(PythonInR)

`?` <- function(e1, e2) UseMethod("?")
`?.default` <- utils::`?`

`?.pyFunction` <- function(e1, e2) {
    topicExpr <- substitute(e1)
    pyHelp(deparse(topicExpr))
}

pyImport("getcwd", from="os", as="os")

? os.getcwd
  

Кроме того, вам потребуется следующее в вашем файле пространства имен.

 export("?")
S3method("?", "default")
S3method("?", "pyFunction")
  

Но для работы этой функции важно, чтобы ваша функция имела одинаковое имя в Python и R.

Я считаю, что было бы лучше, если бы вы создавали файлы .Rd для своих функций R.