2014-04-14 2 views
1

thisthat을 이미 보았지만 여전히 문제를 해결할 수는 없습니다. 붙여 넣기 및 대용 기호를 인용 부호와 함께 사용하여 R

는 최소한의 작업 예제를 가정 : 여기

a <- c(1,2,3) 
b <- c(2,3,4) 
c <- c(4,5,6) 
dftest <- data.frame(a,b,c) 

foo <- function(x, y, data = data) { 
    data[, c("x","y")] 
    } 
foo(a, b, data = dftest) 

이, 마지막 줄은 분명히 Error: undefined columns selected 반환합니다. 선택한 열이 xy이고 데이터 프레임 dftest의 일부가 아니기 때문에이 오류가 반환됩니다.

질문 : 어떻게 내가 기능 foo를 호출하여 가져올

> dftest[, c("a","b")] 
# a b 
# 1 1 2 
# 2 2 3 
# 3 3 4 

입니다 원하는 출력을 얻기 위해 함수의 정의를 수립 할 필요가있다.

솔루션을 내 용도로 유용하게 사용하려면 foo의 함수 호출 형식을 고정 된 것으로 간주해야합니다. 즉, 함수 자체 만 변경해야합니다. 호출. 나는. foo(a, b, data = dftest)이 허용되는 유일한 입력입니다.

접근 : 내가 먼저 함수 호출의 인수를 사용하여 xy를 교체 한 후 전화를 평가하기 위해 eval와 함께 pastesubstitute을 사용했습니다. 여기

foo <- function(x, y, data = data) { 
    substitute(data[, paste("c(\"",x,"\",\"",y,"\")", sep = "")]) 
    } 
foo(a, b, data = dftest)  
eval(foo(a, b, data = dftest)) 

, foo(a, b, data = dftest) 반환 : 그러나, 인용 부호를 이스케이프하는 것은 여기에 문제가 될 것 같다, 그러나

dftest[, paste("c(\"", a, "\",\"", b, "\")", sep = "")] 

(단지 paste 부분에 초점) eval()으로 평가

paste("c(\"", a, "\",\"", b, "\")", sep = "") 

아니, 내가 희망하는대로 c("a","b"), 다시 위와 같은 오류가 발생합니다.

답변

2

이 시도 :

foo <- function(x, y, data = data) { 
    x <- deparse(substitute(x)) 
    y <- deparse(substitute(y)) 
    data[, c(x, y)] 
} 
+0

당신을 감사합니다! 매일 R에서 발견 할 수있는 새로운 기능이 있습니다! 그래도 1 시간 동안 해결하려고하는 질문에 대해 몇 분 안에 대답을 얻을 때 약간의 실망감을 느낄 수 있습니다./ – iraserd

+0

@rawr, 그 옵션을 사용해 보셨습니까? – A5C1D2H2I1M1N2O1R2T1

+0

예, 나는 foo를 grothe의 foo로 이미 대체했다고 생각합니다. – rawr