R中的一个很酷的功能是,如果我输入函数名称,我就可以看到其实现。但这个递归函数让我感到困惑:
> library(xts)
> align.time
function (x, ...)
{
UseMethod("align.time")
}
<environment: namespace:xts>
x是一个XTS对象,那么这不意味着它会调用XTS align.time方法...但这正是我想要的!(输入xts::align.time
得到的响应完全相同。)
R中的一个很酷的功能是,如果我输入函数名称,我就可以看到其实现。但这个递归函数让我感到困惑:
> library(xts)
> align.time
function (x, ...)
{
UseMethod("align.time")
}
<environment: namespace:xts>
x是一个XTS对象,那么这不意味着它会调用XTS align.time方法...但这正是我想要的!(输入xts::align.time
得到的响应完全相同。)
简短的回答是,您正在寻找函数xts:::align.time.xts
。
更详细的回答是,您可以通过调用methods
来查找align.time
存在哪些方法:
> methods(align.time)
[1] align.time.POSIXct* align.time.POSIXlt* align.time.xts*
Non-visible functions are asterisked
这告诉你有一个方法align.time.xts
没有从命名空间中导出。此时,您可能已经猜到它可以在xts
包中找到,但您可以使用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>
当然,您可以直接阅读源代码,但由于该函数未导出,因此需要使用 package:::function
(即三个冒号):
> 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>
align.time()
是从 xts 命名空间导出的,所以 xts::align.time
和 align.time
是同一件事。您需要注意,在该软件包中提供了类"xts"
的align.time()
方法,并且未从命名空间导出(它只是注册为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>