假设我有一个值x
它是某种(未知)类型(特别是:标量、向量或列表)。我想得到代表这个值的 R 表达式。如果x == 1
那么这个函数应该简单地返回expression(1)
. For x == c(1,2))
这个函数应该返回expression(c(1,2))
. The 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
函数是某种 hack。从逻辑上讲,评估应该是没有必要的。
有没有更优雅的方法来做到这一点?据我所知,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))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)