如何在R中使用管道时保持函数中的默认值?

时间:2015-10-16 01:51:16

标签: r magrittr

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

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

但那不起作用;当我打电话给x时,它告诉我无法找到它。我知道它是一系列有效的函数,因为它可以工作:

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

知道怎么做到这一点?谢谢!

注意:我正在使用stringr的{​​{3}},这是github version函数的来源。

1 个答案:

答案 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