r - div - ¿Qué significa useMethod aquí?
tags$div shiny (2)
La respuesta corta es que está buscando la función xts:::align.time.xts
.
La respuesta más larga es que puedes encontrar qué métodos existen para align.time
llamando a los methods
:
> methods(align.time)
[1] align.time.POSIXct* align.time.POSIXlt* align.time.xts*
Non-visible functions are asterisked
Esto le indica que existe un método align.time.xts
que no se exporta desde el espacio de nombres. En este punto, probablemente pueda adivinar que se puede encontrar en el paquete xts
, pero puede confirmarlo con getAnywhere
:
> getAnywhere("align.time.xts")
A single object matching ''align.time.xts'' was found
It was found in the following places
registered S3 method for align.time from namespace xts
namespace:xts
with value
function (x, n = 60, ...)
{
if (n <= 0)
stop("''n'' must be positive")
.xts(x, .index(x) + (n - .index(x)%%n), tzone = indexTZ(x),
tclass = indexClass(x))
}
<environment: namespace:xts>
Por supuesto, puede leer la fuente directamente, pero como la función no se exporta, debe usar la package:::function
(es decir, tres puntos):
> xts:::align.time.xts
function (x, n = 60, ...)
{
if (n <= 0)
stop("''n'' must be positive")
.xts(x, .index(x) + (n - .index(x)%%n), tzone = indexTZ(x),
tclass = indexClass(x))
}
<environment: namespace:xts>
Una de las cosas más importantes de R es que si escribo el nombre de la función puedo ver la implementación. Pero este me está confundiendo, recursivamente:
> library(xts)
> align.time
function (x, ...)
{
UseMethod("align.time")
}
<environment: namespace:xts>
x es un objeto XTS, así que eso no significa que llamará al método XTS align.time ... ¡pero eso es lo que estoy viendo! (Escribir xts::align.time
da exactamente la misma respuesta.)
align.time()
se exporta desde el espacio de nombres xts , por lo que xts::align.time
y align.time
son la misma cosa. align.time()
tener en cuenta que hay un método align.time()
para los objetos de la clase "xts"
proporciona en el paquete y que no se exporta desde el espacio de nombres (solo se registra como un método S3):
> xts:::align.time.xts
function (x, n = 60, ...)
{
if (n <= 0)
stop("''n'' must be positive")
.xts(x, .index(x) + (n - .index(x)%%n), tzone = indexTZ(x),
tclass = indexClass(x))
}
<environment: namespace:xts>
Este es el método al que se llama cuando pasa un objeto "xts"
a align.time()
.
Cuando llama a align.time()
UseMethod()
configura la búsqueda y la llamada del método "align.time"
apropiado, si está disponible, para la clase de objeto suministrado como primer argumento. UseMethod
está haciendo exactamente lo que cree que está haciendo, simplemente se ha confundido al observar la misma función (la genérica) de dos maneras diferentes.