f <- function(x, y, z) {
lapply(as.list(match.call()[-1]), eval)
}
f(x=2, z=3)
输出符合预期:
$x
[1] 2
$z
[1] 3
但是,当此函数包含在另一个函数中时,它会失败。
g <- function(a) {
f(x=a, z= 3)
}
g(2)
错误消息:
Error in FUN(X[[i]], ...) : object 'a' not found
显然,eval
函数仅在父环境中查找,而不在较高环境中查找。在调试模式下,它按预期工作:
> g <- function(a) {
+ browser()
+ f(x=a, z= 3)
+ }
> g(2)
Called from: g(2)
Browse[1]> a
[1] 2
答案 0 :(得分:2)
这取自#!/bin/sh
set +e
exec command_that_will_fail
if [ $? -eq 1 ]; then
echo "command failed, running another command"
fi
例子:
?eval
您似乎需要专门定义父环境。