1

我觉得这应该是一项非常容易的任务,但我似乎无法在网上找到答案。我只是想做这样的事情:

stringr::str_interp("x <- ${rnorm(1)}") %>% parse(text = .) %>% eval()

但这不起作用;当我打电话时x它告诉我它找不到。我知道这是一系列有效的功能,因为它有效:

eval(parse(text = stringr::str_interp("x <- ${rnorm(1)}")))

知道如何实现这一目标吗?谢谢!

注意:我使用的是github 版本stringr这是str_interp函数的来源。

4

1 回答 1

3

这里有几个问题。首先,嵌套函数是从内向外求值的,所以它应该是

str_interp --> parse --> eval

既然parse()进去了eval()。串起来,解析它,评估它。接下来,您需要在默认环境(eval()即父框架)以外的环境中对其进行评估。我选择了全球环境。

library(magrittr)
str_interp("x <- ${rnorm(1)}") %>% parse(text = .) %>% eval(globalenv())
x
# [1] 0.1542613

注意:重现此功能的必要功能位于stringr开发版本中,可在此处找到:https ://github.com/hadley/stringr/blob/master/R/interp.R

于 2015-10-16T02:11:37.910 回答