2012-08-09 4 views
4

부분 집합 및 subset 인수에 전달합니다 : 나는 substitute과 노력패스 일부 인수는 내가 <code>subset</code>를 호출하는 기능을 가지고 싶습니다

df <- data.frame(abc=c("A","A","B","B"),value=1:4) 
subset(df,abc=="A") 
## works of course: 
# abc value 
#1 A  1 
#2 A  2 

mysubset <- function(df,ssubset) 
    subset(df,ssubset) 

mysubset(df,abc=="A") 
## Throws an error 
# Error in eval(expr, envir, enclos) : object 'abc' not found 

mysubset2 <- function(df,ssubset) 
    subset(df,eval(ssubset)) 

mysubset2(df,expression(abc=="A")) 
## Works, but needs expression 

하지만, 적절한 조합을 찾을 수 없습니다 . 이 기능을 어떻게 작동시킬 수 있습니까? 당신이 둥지 따옴표 필요

mysubset <- function(df, ssubset) { 
    subset(df, eval(parse(text=ssubset))) 
} 
mysubset(df, "abc=='A'") 
# abc value 
# 1 A  1 
# 2 A  2 

주, 그래서 "' 필요 사이에 앞뒤로 전환 :

+1

mysubset(df, abc=='A')이 봐 유무 : https://github.com/hadley/ devtools/wiki/Evaluation – James

+0

제임스, 링크 덕분에, 그것은 매우 통찰력! –

+0

관련 질문 : http://stackoverflow.com/questions/9860090/in-r-why-is-better-than-subset – flodel

답변

11

당신이 너무에 eval()parse()이 필요합니다.


귀하의 의견을 바탕으로,이 같은 아마 뭔가 관심 또한

:

mysubset <- function(df, ...) { 
    ssubset <- deparse(substitute(...)) 
    subset(df, eval(parse(text = ssubset))) 
} 

사용법 :

+0

답변 해 주셔서 감사합니다. 따옴표없이 할 수 있는지 알고 계십니까? –

+0

이런 뜻인가요? mysubset <- function (df, ...) {ssubset <- deparse (대체 (...)); 부분 집합 (df, eval (구문 분석 (텍스트 = ssubset)))}'. 사용법 : mysubset (df, abc == 'A') ' – A5C1D2H2I1M1N2O1R2T1

+0

위대한 답변을 수락 해 주셔서 감사합니다. 주된 대답에이 가능성을 추가 할 수 있다면 좋을 것입니다. –

관련 문제