2011-02-25 2 views
3

내가이 같은 코드를 가지고 말 : 내가 평가되지 않은 기능을 얻을 tmp 내가 입력하면, 이제switch 문 내에서 익명 함수 (들)을 평가

tmp <- switch("b", 
       a = print("foo"), 
       b = function() paste("I want to evaluate this one!"), 
       stop("say what now?") 
) 

를, 그래서 나중에 괄호의 쌍을 추가 할 필요가 위해 그것을 평가하기 :

물론
tmp 
## function() paste("I want to evaluate this one!") 
tmp() 
## [1] "I want to evaluate this one!" 

,이 기능을 미리 정의 할 수 있으며 (이 익명 아니라 경우에) switch 내를 통과,하지만 난 그게 익명 평가할 수 및/또는 합리적인지 알고 싶어 switch 문 내에서 작동합니다.

+0

왜'b'가'paste '일 수 없는지 ("나는 이것을 평가하고 싶다!")', 즉 R이 그 문장을 평가하여 리턴 된 객체를 제공하게하는 것을 보려고 고심하고있다. 'tmp'에 전달 되었습니까? 최종 결과가'tmp'에서 평가 된 결과를 얻는 것이라면 왜 이것을하고 싶지 않은지 모르겠습니다. 더 많은 정보 나 설명을 제공해 줄 수 있습니까? –

+2

AFAIK 이것이 기본 동작 (인쇄 개체)입니다. –

답변

2

나는 do.call() 익명 함수를 호출하는 일이 마련 될 것 같아요 :

tmp <- switch("b", 
       a = print("foo"), 
       b = do.call(function() paste("I want to evaluate this one!"), 
          list()), 
       stop("say what now?") 
) 

예컨대을 :

> tmp 
[1] "I want to evaluate this one!" 

에드 그것은 상기의 간단한 버전은 다음 따라서 익명 함수 괄호의 제 1 세트 및 생성 된 함수 생성

tmp <- switch("b", 
       a = print("foo"), 
       b = (function() paste("I want to evaluate this one!"))(), 
       stop("say what now?") 
) 

()는 상기 제 2 세트를 추가로 불린다.


그러나 명명 된 기능으로 익명 함수를 설정하고 전화 나 청소기 보인다

같은 최종 결과가
foo <- function() paste("I want to evaluate this one!") 
tmp <- switch("b", 
       a = print("foo"), 
       b = foo(), 
       stop("say what now?") 
) 

:이 경우

> tmp 
[1] "I want to evaluate this one!" 

을 모든 함수 내에서 foo()은 인라인으로 정의 될 수 있으므로 외부 함수 호출을 실행하는 동안에 만 존재합니다.

+0

+1 이것 1 개! 나는 그 해결책이 아주 단순하고 매우 명백 할 것이라고 생각했다 ... 그리고 나는 특히'(tmp)()'세부 사항을 좋아한다. =) – aL3xa

1

중괄호없이 객체 (해당 data.frame, 목록 또는 귀하의 경우에는 함수)를 작성하면 print()이 발생합니다. 분명히

:

> class(tmp()) 
[1] "character" 
> class(tmp) 
[1] "function" 
+0

+1 : 매우 정확함 –

+0

나는 이것이 @ aL3xa가 무엇인지 알지 못합니다. Q는 익명의 인라인 함수를 어떻게 평가하고 호출 할 것인가를 의미하는 것으로 이해했다.'tmp'는 현재 Q에 표시된 코드에서'tmp()가 무엇을 하는지를 리턴한다. ** 익명의 기능을 호출 ** 결과 **. –

+0

확실한 것은 그렇지만 기능을 평가하고 싶다 ... Gavin있어 ... =) – aL3xa

1

Roman이 말했듯이 함수가 반환됩니다. 함수의 결과를 원하면 함수를 넣으십시오 (귀하의 경우에는 function()을 입력하십시오).

tmp <- switch("b", 
       a = print("foo"), 
       b = { 
        x <- paste("I want to evaluate this one!") 
        x <- paste(x,sample(1:10,1)) 
        print(x) 
       }, 
       stop("say what now?") 
) 

을하지만 당신은 결과를 유지하는 것이 알고 있어야합니다, 그래서 당신은 항상 sample에서 같은 결과를해야합니다 : 당신이 다른 기능의 조합을 원하는 경우, 괄호에 넣어.