假设我有一个值 x
这是某种(未知)类型(尤其是:标量、向量或列表)。我想得到代表这个值的 R 表达式。如 x == 1
那么这个函数应该简单地返回 expression(1)
.对于 x == c(1,2))
这个函数应该返回 expression(c(1,2))
. enquote
功能非常接近我想要的,但不完全是。
通过一些玩耍,我发现了以下问题的“解决方案”:
get_expr <- function(val) {
tmp_expr <- enquote(val)
tmp_expr[1] <- quote(expression())
return(eval(tmp_expr))
}
get_expr(1) # returns expression(1)
get_expr(c(1, 2)) # returns expression(c(1, 2))
get_expr(list(x = 1)) # returns expression(list(x = 1))
但我想我的
get_expr
功能是某种黑客。从逻辑上讲,评估不应该是必要的。有没有更优雅的方法来做到这一点?据我所知,
substitute
对我不起作用,因为我的 get_expr
的参数函数可能是评估的结果(而 substitute(eval(expr))
不进行评估)。我通过
parse(text = deparse(val))
找到了另一种方式,但这更像是一个糟糕的黑客......
最佳答案
as.expression(list(...))
似乎这样做:
> get_expr <- function(val) as.expression(list(val))
> str(get_expr(1))
expression(1)
> str(get_expr(c(1, 2)))
expression(c(1, 2))
> str(get_expr(list(x=1)))
expression(list(x = 1))
> val <- list(x=1, y=2)
> str(get_expr(val))
expression(list(x = 1, y = 2))
关于r - 从值中获取 R 表达式(类似于 enquote),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28813689/