문제

가능합니까? expr 표현 with() 기능, 액세스 data 직접 논쟁? 내가 개념적으로 의미하는 바는 다음과 같습니다.

> print(df)
  result qid     f1     f2     f3
1     -1   1 0.0000 0.1253 0.0000
2     -1   1 0.0098 0.0000 0.0000
3      1   1 0.0000 0.0000 0.1941
4     -1   2 0.0000 0.2863 0.0948
5      1   2 0.0000 0.0000 0.0000
6      1   2 0.0000 0.7282 0.9087
> with(df, subset(.data, select=f1:f3))  # Doesn't work

물론 위의 예는 어리석은 일이지만 다음과 같은 것들에 편리 할 것입니다.

with(subset(df, f2>0), foo(qid, vars=subset(.data, select=f1:f3)))

나는 주위를 찌르려고 노력했다 environment() 그리고 parent.frame() 등, 그러나 효과가있는 것은 없었습니다.

어쩌면 이것은 정말로 문제 일 것입니다 eval(), 그 이유는 그 이유입니다 with.default() 구현되었습니다.

도움이 되었습니까?

해결책

사용 parent.frame():

# sample data:
set.seed(2436502)
dfrm <- data.frame(x1 = rnorm(100), x2 = rnorm(100), g1 = sample(letters, 100, TRUE))

# how to use it:
with(subset(dfrm, x1<0), {
    str(parent.frame(2)$data)
    "Hello!"
})

# 'data.frame':   47 obs. of  3 variables:
#  $ x1: num  -0.836 -0.343 -0.341 -1.044 -0.665 ...
#  $ x2: num  0.362 0.727 0.62 -0.178 -1.538 ...
#  $ g1: Factor w/ 26 levels "a","b","c","d",..: 11 4 15 19 8 13 22 15 15 23 ...

마법이 어떻게 작동하는지

사용 ls() 검사 할 수 있습니다 parent.frames:

with(subset(dfrm, x1<0), {
    print(ls())
    print(ls(parent.frame(1)))
    print(ls(parent.frame(2)))
    print(ls(parent.frame(3)))
})
# [1] "g1" "x1" "x2"
# [1] "enclos" "envir"  "expr"  
# [1] "data" "expr"
# [1] "dfrm"

보시다시피 :

  • parent.frame(3) 기본 환경 (이 경우),
  • parent.frame(2) 환경입니다 subset 기능
  • parent.frame(1) 환경입니다 { 기능 (참조 ?Paren)

다른 팁

나는 그것을 뒤집는 경향이있다 with() 외부와 가지고 있습니다 subset() 데이터 작업 :

R> data(mtcars)
R> with(subset(mtcars, gear==4), lm(mpg ~ wt)) # no data arg

Call:
lm(formula = mpg ~ wt)

Coefficients:
(Intercept)           wt  
      42.49        -6.86  

이것은 또한 어리석은 예입니다 lm(mpg ~ wt, data=mtcars, subset=gear==4)분명히 동일하지만 드리프트를 얻습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top