Для произвольного объекта R, как я могу получить все методы, связанные с объектом?
Получить методы объекта R
Ответ 1
Ближайшим, о котором я могу думать, является methods
(если объект/функция S3, List all available methods for an S3 generic function, or all methods for a class.
) или showMethods
(если S4).
например:.
> A <- matrix(runif(10))
> B <- methods(class=class(A))
> B
[1] anyDuplicated.matrix as.data.frame.matrix as.raster.matrix*
[4] boxplot.matrix determinant.matrix duplicated.matrix
[7] edit.matrix* head.matrix isSymmetric.matrix
[10] relist.matrix* subset.matrix summary.matrix
[13] tail.matrix unique.matrix
Non-visible functions are asterisked
> attr(B,'info')
visible from
anyDuplicated.matrix TRUE package:base
as.data.frame.matrix TRUE package:base
as.raster.matrix FALSE registered S3method
boxplot.matrix TRUE package:graphics
determinant.matrix TRUE package:base
duplicated.matrix TRUE package:base
edit.matrix FALSE registered S3method
head.matrix TRUE package:utils
isSymmetric.matrix TRUE package:base
relist.matrix FALSE registered S3method
subset.matrix TRUE package:base
summary.matrix TRUE package:base
tail.matrix TRUE package:utils
unique.matrix TRUE package:base
Или для функции:
> methods(summary)
[1] summary.aov summary.aovlist summary.aspell*
[4] summary.connection summary.data.frame summary.Date
[7] summary.default summary.ecdf* summary.factor
[10] summary.glm summary.infl summary.lm
[13] summary.loess* summary.manova summary.matrix
[16] summary.mlm summary.nls* summary.packageStatus*
[19] summary.PDF_Dictionary* summary.PDF_Stream* summary.POSIXct
[22] summary.POSIXlt summary.ppr* summary.prcomp*
[25] summary.princomp* summary.srcfile summary.srcref
[28] summary.stepfun summary.stl* summary.table
[31] summary.tukeysmooth*
Non-visible functions are asterisked
?Methods
также может оказаться полезным.
Ответ 2
Класс объекта R восстанавливается с помощью class
. Объекты не имеют связанных с ними методов в типичном R-языке. Класс объекта определяет, какие функции-методы будут применены к нему. Чтобы определить, какие функции имеют методы, связанные с данным классом, вам нужно будет проверить все доступные функции, чтобы увидеть, существует ли метод класса. Даже тогда общие функции будут пытаться использовать метод "по умолчанию" в большинстве случаев.
Некоторые методы, связанные с общей функцией S3, отображаются с помощью methods
. Методы функции S4 восстанавливаются с помощью showMethods
. Таким образом, для того, что большинство людей называют "объектами", ваш вопрос не имеет смысла, но если случилось, что вы включили функции под общим термином "объекты" (что является технически справедливым), то я ответил.
showMethods(classes="data.frame")
methods(class="data.frame")
Затем существует группа методов, которые могут быть названы "неявными", хотя их R-имя "groupGeneric"
?groupGeneric
methods("Math") # These are "add-on" methods to the primitive Math functions
[1] Math.data.frame Math.Date Math.dates* Math.difftime Math.factor
[6] Math.mChoice Math.polynomial* Math.POSIXt Math.ratetable* Math.Surv*
[11] Math.times*
Non-visible functions are asterisked
?"+"
methods("Ops") # The binary operators such as "+", "-", "/"
[1] Ops.data.frame Ops.Date Ops.dates* Ops.difftime Ops.factor
[6] Ops.findFn Ops.mChoice Ops.numeric_version Ops.ordered Ops.polynomial*
[11] Ops.POSIXt Ops.raster* Ops.ratetable* Ops.Surv* Ops.times*
[16] Ops.ts* Ops.unit* Ops.yearmon* Ops.yearqtr* Ops.zoo*
Non-visible functions are asterisked
И даже тогда вы на самом деле не показываете членов семейства Math или Ops, но вы бы видели их на странице справки для группы groupGeneric. Вы не видите Ops.numeric. Несколько более низкий уровень обеспечивает:
.Primitive("+")
# function (e1, e2) .Primitive("+")
Это вызовет ошибку, если предлагается неправильный аргумент класса.
Ответ 3
Некоторые пакеты определяют функции, которые не являются методами, но которые тем не менее предназначены для использования с определенным классом. Например, библиотека (igraph) определяет функцию radius(_)
, которая предназначена для использования в объектах класса igraph
. Поскольку такие функции не являются методами, methods(_)
и showMethods(_)
не будут раскрывать их.
В таких случаях lsf.str(_)
может быть очень полезным. Например:
lsf.str("package:igraph")
содержит строку:
radius : function (graph, mode = c("all", "out", "in", "total"))