style div r xts

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.