簡體   English   中英

如何從聯合函數中獲取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)
# 

如果您願意,也可以使它與atttibutes一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM