如何从联合函数中获取 match.call() ?
How to get match.call() from a united function?
我有三个函数,其中一个函数是通过使用 useMethod() 从另外两个函数中提取出来的。
logReg <- function(x, ...) UseMethod("logReg")
logRec.numeric <- function(x, y) {
print(x)
}
logReg.formula <- function(formula, data) {
print(formula)
}
我的功能有点复杂,但对我的问题来说无关紧要。我希望 logReg 额外给我原始函数调用作为输出(不是 logReg.numeric 或 logReg.formula 的函数调用)。我的第一次尝试是:
logReg <- function(x, ...) {
out <- list()
out$call <- match.call()
out
UseMethod("logReg")
}
但是不行。有人可以提示我如何解决我的问题吗?
尝试明确评估它。请注意,这会将调用者保留为方法的父框架。
logReg <- function(x, ...) {
cl <- mc <- match.call()
cl[[1]] <- as.name("logReg0")
out <- structure(eval.parent(cl), call = mc)
out
}
logReg0 <- function(x, ...) UseMethod("logReg0")
logReg0.numeric <- function(x, ...) print(x)
logReg0.formula <- function(x, ...) print(x)
result <- logReg(c(1,2))
## [1] 1 2
result
## [1] 1 2
## attr(,"call")
## logReg(x = c(1, 2))
这是另一种方式:
logReg <- function(x, ...) {
logReg <- function(x, ...) UseMethod("logReg")
list(logReg(x,...), call=match.call())
}
res <- logReg(1,2)
# [1] 1
res
# [[1]]
# [1] 1
#
# $call
# logReg(x = 1, 2)
#
如果您愿意,也可以让它与属性一起使用。
我有三个函数,其中一个函数是通过使用 useMethod() 从另外两个函数中提取出来的。
logReg <- function(x, ...) UseMethod("logReg")
logRec.numeric <- function(x, y) {
print(x)
}
logReg.formula <- function(formula, data) {
print(formula)
}
我的功能有点复杂,但对我的问题来说无关紧要。我希望 logReg 额外给我原始函数调用作为输出(不是 logReg.numeric 或 logReg.formula 的函数调用)。我的第一次尝试是:
logReg <- function(x, ...) {
out <- list()
out$call <- match.call()
out
UseMethod("logReg")
}
但是不行。有人可以提示我如何解决我的问题吗?
尝试明确评估它。请注意,这会将调用者保留为方法的父框架。
logReg <- function(x, ...) {
cl <- mc <- match.call()
cl[[1]] <- as.name("logReg0")
out <- structure(eval.parent(cl), call = mc)
out
}
logReg0 <- function(x, ...) UseMethod("logReg0")
logReg0.numeric <- function(x, ...) print(x)
logReg0.formula <- function(x, ...) print(x)
result <- logReg(c(1,2))
## [1] 1 2
result
## [1] 1 2
## attr(,"call")
## logReg(x = c(1, 2))
这是另一种方式:
logReg <- function(x, ...) {
logReg <- function(x, ...) UseMethod("logReg")
list(logReg(x,...), call=match.call())
}
res <- logReg(1,2)
# [1] 1
res
# [[1]]
# [1] 1
#
# $call
# logReg(x = 1, 2)
#
如果您愿意,也可以让它与属性一起使用。