在 R 中使用管道时如何维护函数中的默认值?
How to maintain defaults in a function when using the pipe in R?
我觉得这应该是一个非常容易的任务,但我似乎无法在网上找到答案。我只是想做这样的事情:
stringr::str_interp("x <- ${rnorm(1)}") %>% parse(text = .) %>% eval()
但这行不通;当我打电话给 x
时,它告诉我找不到它。我知道这是一系列有效的函数,因为它有效:
eval(parse(text = stringr::str_interp("x <- ${rnorm(1)}")))
知道如何实现吗?谢谢!
注意:我使用的是来自github version of stringr
, which is where the str_interp
的函数。
这里有几个问题。首先,嵌套函数从内到外计算,所以它应该是
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
我觉得这应该是一个非常容易的任务,但我似乎无法在网上找到答案。我只是想做这样的事情:
stringr::str_interp("x <- ${rnorm(1)}") %>% parse(text = .) %>% eval()
但这行不通;当我打电话给 x
时,它告诉我找不到它。我知道这是一系列有效的函数,因为它有效:
eval(parse(text = stringr::str_interp("x <- ${rnorm(1)}")))
知道如何实现吗?谢谢!
注意:我使用的是来自github version of stringr
, which is where the str_interp
的函数。
这里有几个问题。首先,嵌套函数从内到外计算,所以它应该是
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