【发布时间】:2020-04-14 07:07:27
【问题描述】:
我想在函数体中捕获函数的参数以帮助进行日志记录。我发现 match.call() 和 sys.call() 在函数调用中明确说明参数值时有效,但在使用对象名称时不输出评估值。
这是一个简化的例子:
gauss_vector <- function(number) {
sys_args <- as.list(sys.call())
match_args <- as.list(match.call())
output <- rnorm(n = number)
list(sys_args,
match_args,
output)
}
当这个函数被这样调用时:
gauss_vector(number = 5)
结果列表包括值5。
[[1]]
[[1]][[1]]
gauss_vector
[[1]]$number
[1] 5
[[2]]
[[2]][[1]]
gauss_vector
[[2]]$number
[1] 5
[[3]]
[1] 0.9663434 0.8051087 0.1576298 0.3189806 -2.3110680
但是,当这样调用函数时:
n <- 5
gauss_vector(number = n)
结果列表仅包括n。
[[1]]
[[1]][[1]]
gauss_vector
[[1]]$number
n
[[2]]
[[2]][[1]]
gauss_vector
[[2]]$number
n
[[3]]
[1] -0.6017670 -0.7631405 0.7793892 -0.7529637 1.3022802
当以第二种方式调用函数时,有没有办法捕获评估的图形而不是对象名称?
【问题讨论】:
-
我认为你需要
eval或eval.parent某处。