Глядя на внутренние методы - PullRequest
11 голосов
/ 29 апреля 2011

Я бы хотел видеть функцию, которая используется, когда я использую str (), так как я хотел бы немного изменить ее для своих собственных целей как другую функцию.

Когда я набираю str(), я получаю следующее:

function (object, ...) 
UseMethod("str")
<environment: namespace:utils>

Итак, я попробовал, getAnywhere(str):

2 differing objects matching ‘str’ were found
in the following places
  .GlobalEnv
  package:utils
  namespace:utils
Use [] to view one of them

Но в документации нет ничего о том, каким должен быть синтаксис для использования []

Итак, я попытался, getAnywhere(str)[1]:

function (object, ...) 
UseMethod("str")
<environment: namespace:utils>

Вздох. Хорошо, а как же showMethods(str):

Function "str":
 <not a generic function>

Итак, как я вижу конструкцию вывода для str()? Или я могу?

Ответы [ 2 ]

11 голосов
/ 29 апреля 2011

Вы хотите methods() для универсального S3, такого как str():

> methods(str)
[1] str.data.frame* str.Date*       str.default*   
[4] str.dendrogram* str.logLik*     str.POSIXt*    

   Non-visible functions are asterisked

Использование getAnywhere(str) не очень полезно, потому что str() виден, поэтому вы получите тот же результат, если просто наберете str в приглашении. Вам нужно getAnywhere(), чтобы посмотреть на скрытые методы, перечисленные выше:

getAnywhere(str.default)

например.

Стыдно, что вам нужно знать, что это за универсальная функция для перечисления методов; кажется, что удобство использования улучшилось бы, если бы R не заботился о том, какой тип метода был предоставлен той или иной из этих функций.

8 голосов
/ 29 апреля 2011

Вы также можете сделать это так:

> methods(by)
[1] by.data.frame by.default
> getS3method("by", "data.frame")
function (data, INDICES, FUN, ..., simplify = TRUE) 
{
   ...
}
<environment: namespace:base>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...