我觉得这应该是一项非常简单的任务,但我似乎无法在线找到答案。我只是想做这样的事情:
stringr::str_interp("x <- ${rnorm(1)}") %>% parse(text = .) %>% eval()
但那不起作用;当我打电话给x
时,它告诉我无法找到它。我知道它是一系列有效的函数,因为它可以工作:
eval(parse(text = stringr::str_interp("x <- ${rnorm(1)}")))
知道怎么做到这一点?谢谢!
注意:我正在使用stringr
的{{3}},这是github version函数的来源。
答案 0 :(得分: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