2014-03-26 14 views
0

Tracemem이 내가 필요한 것을하고 있지만 산만 해 보이는 시각적 인 혼란을 일으키고 있습니다. 다음은 간단한 예입니다.R : 함수에서 사용할 때 tracemem에서 시각적 인 혼란을 제거하십시오.

a<-1 
b<-2 

dummyfunction<-function(x,y){return(sum(x,y))} 
dummyfunction(a,b) 
[1] 3 

지금, 나는이 입력이 중복되는 경우 내가 원하는 것을

dummyfunction2<-function(x,y){if (tracemem(x)==tracemem(y)){return("Input vectors are identical")} 
    if(sum(x %in% y)>=length(x) & sum(y %in% x)>=length(y)){print("Something something.")} 
           return(sum(x,y))} 

... 더 복잡한 뭔가, 입력이 중복되어 있는지 먼저 tracemem을하고 싶은 ...

이 기능이 중복되지 않으면이 기능은 여전히 ​​작동하지만 혼란스러운 정보가 쏟아져 나옵니다.

dummyfunction2(a,b) 
tracemem[0x0000000009824470 -> 0x000000000a7ced80]: match %in% dummyfunction2 
tracemem[0x0000000009824500 -> 0x000000000a7cedb0]: match %in% dummyfunction2 
tracemem[0x0000000009824500 -> 0x000000000a7cef90]: match %in% dummyfunction2 
tracemem[0x0000000009824470 -> 0x000000000a7cc1a8]: match %in% dummyfunction2 
[1] 3 

나는이 문제를 함수를 사용하여 시도 비 R 사용자를 설득 바라고,이 같은 출력은 확실히 그들을 놀라게 할 것이다.

잠재적 인 유익한 경고를 남기지 않으면 서이 시각적 인 혼란을 제거하는 가장 우아한 방법은 무엇입니까? 함수의 다른 부분에서 잘릴 수있는 등?

답변

1

:

"은 메시지마다 내부 코드를 복사 대상물 인쇄되도록이 함수는 객체를 표시한다."

당신은 그것을 해결하기 위해 함수에 untracemem 스틱 수 :

dummyfunction3<-function(x,y){ 
if (tracemem(x)==tracemem(y)){return("Input vectors are identical")} 
untracemem(x) 
untracemem(y) 
if(sum(x %in% y)>=length(x) & sum(y %in% x)>=length(y)){print("Something something.")} 
return(sum(x,y))} 

출력 :

a <- 1 
b <- 2 
dummyfunction3(a,a) 
# [1] "Input vectors are identical" 
dummyfunction3(a,b) 
# [1] 3