2017-04-21 4 views
2

私は名前でいくつかのオブジェクトを収集していて使用する必要がありますどのような環境:私は、RDS内のリストとして保存する%>%mgetは

A = 1 
B = 2 
mget(c("A","B")) 

私はパイプにしたい場合は...

library(magrittr) 
c("A","B") %>% mget     # nope 
c("A","B") %>% mget(env = globalenv()) # ok 

しかし、私はいくつかの環境内で働いていると私はその名前を再入力したくない場合は...

e = new.env() 
e$a = 1 
e$b = 2 
with(e, { 
    # do some stuff, then... 
    c("a","b") %>% mget 
}) 

私は入力する必要があると仮定しています、しかし何かを理解することができません(eから離れて)。

+0

に、私はこのための即時の必要性よりも好奇心のうち多くを求めている... – Frank

+0

へぇ、そうここにリチャードスクリヴンの答えを読んだ後、HTTPとしてあなたはおそらく、parent.env(environment())で逃げることもできます/ /stackoverflow.com/a/27054476/私はすべてのparent.frame(n)を試して、n = 6が動作することを発見しました。 Go figure。 – Frank

答えて

3

with(e, { c("a","b") %>% mget(env=parent.env(environment())) }) 
+0

ありがとう!新しいバリエーション:この作品のようなものを作れますか? 'mmget < - mget; フォーマル(mmget)[["envir"]] < - quote(parent.env(environment())); (e、c( "a"、 "b")%>%mmget) 'それともあまりにも愚かなアイデアですか? – Frank

+0

とにかく、それをカバーする答えがわからない、あるいはそれを拡張したくないのであれば、私は新しい質問を投稿することができます。私は 'mmget < - mget; フォーマル(mmget)[["envir"]] < - quote(parent.frame(7)); (e、c( "a"、 "b")%>%mmget) 'は非常に壊れやすく見えます。 – Frank

+1

@Frank yeaその音はトリッキーです。そこに 'mmet'を定義すると、その囲む環境はグローバルなので、その親はベースになります。 「環境」の評価は、パイプ環境ラッパーの内部まで遅らせる必要があります。 – jenesaisquoi

関連する問題