Я хотел бы захватить аргументы функции в ее теле, чтобы помочь с регистрацией. Я обнаружил, что 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
Существует ли способ получения оцененного числа, а не имени объекта, когда функция вызывается вторым способом?