2017-04-21 9 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

에서 나는 이것에 대한 즉각적인 필요 이상으로 호기심 더 부탁 해요로, parent.env(environment()) 멀리 얻을 수 ... – Frank

+0

훗, 그래서 HTTP 여기 리처드 Scriven에의 답변을 읽은 후 /stackoverflow.com/a/27054476/ 모든 parent.frame (n)을 시도해 본 결과 n = 6이 작동한다는 것을 알았습니다. 그림을 이동. – Frank

답변

3

당신은 아마

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

감사합니다. 새로운 유사 콘텐츠 :이 저작물을 만들 수 있습니까? 'mmget <- mget; formals (mmget) [[ "envir"]] <- quote (parent.env (environment())); (e, c ("a", "b") %> % mmget)'또는 너무 어리석은 생각입니까? – Frank

+0

어쨌든, 당신이 그것을 커버하기 위해 답을 연장하지 않거나 선호하지 않는다면, 나는 새로운 질문을 게시 할 수 있습니다. 나는'mmget <- mget; formals (mmget) [[ "envir"]] <- quote (parent.frame (7)); (e, c ("a", "b") %> % mmget)'매우 믿을 수 없을 정도로 보입니다. – Frank

+1

@Frank yea 그건 까다로운 소리. 거기에'mmet'을 정의하면 그 둘러싸인 환경은 전역이 될 것이므로 부모가 기본이됩니다. '환경'의 평가는 파이프 환경 래퍼의 내부까지 지연되어야합니다. – jenesaisquoi