2014-09-16 3 views
3

함수에 의해 값이 보이지 않는 경우 어떻게 알 수 있습니까?

f1 <- function(x) { 
    # do something 
    x 
} 

f2 <- function(x) { 
    # do something 
    invisible(x) 
} 

가정하자 다음과 같은 기능 내가 별도로이 두 함수를 호출하고 그 값을 저장 고려한다.

a <- f1(1) 
b <- f2(2) 

ab이 보이지 않게 반환하는 경우 알 수있는 방법이 있습니까?

동기 부여는 값이 보이지 않으면 함수가 값을 보이지 않게 반환하려는 함수를 만들고 싶습니다.

답변

8

이 작업을 수행 할 수있는 withVisible을있다 : identical(a,b)TRUE 때문에

> f3 = function(f, x){ 
    v=withVisible(f(x)) 
    if(v$visible){ 
    return(v$value) 
     }else{ 
    return(invisible(v$value)) 
     } 
    } 
> f3(f1,1) 
[1] 1 
> f3(f2,1) 

, 당신은 ab있어 일단 그것을하는 방법은 없습니다. 식에 withVisible (으)로만 호출 할 수 있습니다. 게으름이나 약속이 일어나지 않으면.

+0

고마워, @Spacedman을 "pinvisible"변수를 이름과 같은 창조적 인 일을 할 경우 분명히이 실패합니다! 새로운 기능을 배웠습니다. –

+0

이것은 정말 내 문제를 해결합니다, 많이 고마워요! –

2

Spacedman (적절한 :-)) 솔루션의 가능한 대안은 "외부"함수 안에 다음 행을 넣는 것입니다.

if (grepl('invisible', body(inner_function))) return(invisible(data)) else return(data)

당신이

관련 문제