问题:
如何找出正在调用哪个版本的函数?例如,如果我在data.frame上使用unique
,我假设我使用的是unique.data.frame
。但是,虽然有unique.raster
,但没有raster::unique
功能。但是,如果我使用trace(unique)
,我只会获得正在使用unique
函数的信息。
我想确认,例如,当我致电unique(data.frame(1))
时,正在调用unique.data.frame
。
示例:
我无法弄清楚为什么unique(raster_object)
在命令行工作但不在函数内工作。显然,unique.default
在函数内部被调用,所以我想明确说明哪个'唯一。&
例如,这有效:
library(raster)
a <- rasterFromXYZ(data.frame(a=1:2,b=2:3,c=3:4))
unique(a)
但是当我把它放在一个函数中时:
myfun <- function(){
a <- rasterFromXYZ(data.frame(a=1:2,b=2:3,c=3:4))
b <- crop(a, extent(c(1,2,3,4)))
unique(a)
}
即使程序包使用raster
作为依赖项,在构建程序包并将其加载到新的R会话后,我收到错误:
> myfun()
Error in unique.default(a) : unique() applies only to vectors
即使sessionInfo()
显示已加载栅格包。
如果我使用debug(unique)
,它似乎没有告诉我调用哪个函数:
Browse[6]> unique(a)
Error in unique.default(a) : unique() applies only to vectors
Browse[6]> raster::unique(a)
debugging in: raster::unique(a)
debug: standardGeneric("unique")
答案 0 :(得分:1)
myfun <- function(){
a <- rasterFromXYZ(data.frame(a=1:2,b=2:3,c=3:4))
b <- crop(a, extent(c(1,2,3,4)))
raster::unique(a)
}
myfun()
#[1] 3 4
如果在S3系统中调度unique.raster
,您可以使用trace(unique)
,但由于类“rasterLayer”的unique
方法是S4函数,因此赢了工作:
> showMethods("unique")
Function: unique (package base)
x="ANY", incomparables="ANY"
x="character", incomparables="missing"
(inherited from: x="ANY", incomparables="ANY")
x="numeric", incomparables="missing"
(inherited from: x="ANY", incomparables="ANY")
x="RasterLayer", incomparables="missing"
x="RasterStackBrick", incomparables="missing"
使用它的包裹位置:
> trace("unique", browser, where=raster)
Tracing function "unique" as seen from package "raster"
[1] "unique"
> myfun()
Tracing unique(xyz[, 1]) on entry
Called from: eval(expr, envir, enclos)
Browse[1]>
Browse[1]> c
[1] 3 4
> untrace()
Error in methods::.TraceWithMethods(where = <environment>, untrace = TRUE) :
argument "what" is missing, with no default
> untrace("unique", where=raster)
Untracing function "unique" as seen from package "raster"