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

注:これを再現するために必要な関数は、httpsstringr ://github.com/hadley/stringr/blob/master/R/interp.R にある開発バージョンにあります。

于 2015-10-16T02:11:37.910 に答える