2014-12-12 2 views
0

히스토그램의 경계를 기본 방식으로 결정하거나 부울 값에 따라 기존 변수가 지정한대로 지정하고 싶습니다. 문제는 다음과 같은 기본값입니다 : hist(breaks="Sturges",xlim=range(breaks)) 그래서 단지 hist(data,xlim=ifelse(myBool,range(breaks),myBounds))과 같이 할 수는 없습니다. '객체'나누기가 "찾을 수 없음"오류를 반환 할 것이기 때문에 할 수 있습니다 ...기본적으로 히스토그램 경계를 사용합니다.

해결 방법은 다음과 같습니다. 기본 경계를 직접 찾으십시오. 누가이 공식에 사용하는지 알 수 있습니까?

+0

나는 "이"마지막 문장을 말한다 것을 100 % 확신하지만, 당신은'hist.default'를 볼 수 있고'nclass.Sturges'를 호출하여 빈의 수를 얻을 수 있습니다. – Gregor

+0

왜 작동하지 않습니까? ' – rawr

+0

gregor, 빈 수는 필요하지 않습니다. 범위가 필요합니다.'hist (mtcars $ mpg, xlim = if (TRUE) c (0, 40) else range (hist (mtcars $ mpg) $ breaks) rawr, 히스토그램을 두 번 생성했습니다. – hedgedandlevered

답변

1

당신의 표시에 따라 두 통화에 대해 어떻게 : breaks = "Sturges" 휴식 시간이

breaks = pretty(range(x), n = nclass.Sturges(x), min.n = 1) 

로 계산 hist.default의 코드를 보면

if(myBool) { 
    hist(data) 
} else { 
    hist(data, xlim = myBounds) 
} 

그래서 당신은 설정할 수 있습니다 :

hist(data, 
    xlim = if(myBool) {range(pretty(range(data), n = nclass.Sturges(data), min.n = 1))} else {myBounds}) 

(ifelse 여기서는 효과가 없습니다. 당신의 상태 myBool 길이 하나이고 당신은 길이 2의 벡터를 반환해야) 또는 @rawr으로 제안 :

hist(data, 
    xlim = ifelse(c(myBool, myBool), 
        range(pretty(range(data), n = nclass.Sturges(data), min.n = 1)), 
        myBounds)) 
+0

누군가가 더 깨끗한 방법으로 하나의 hist()를 가지고 있지만 받아 들여질 때까지 기다릴 것이지만, 이것은 더 좋은 해결 방법입니다. – hedgedandlevered

+0

누군가 질문을 재현 할 수 없으면 휴식 시간을 계산하는 등 더 많은 작업을 수행합니다. 'mtcars' 데이터 셋처럼 당신이하려고하는 것에 대한 좀 더 구체적인 예를들 수 있습니까? – Gregor

+0

여기 청소기를 많이 쓸 수 있는지 잘 모르겠습니다. 원래의 문제는 기본'xlim ='값이 함수의 외부에없는'breaks' 변수에 기반한다는 것입니다. 함수에 전달 된 변수는 호출 컨텍스트에서 평가되고 기본 매개 변수로 설정된 변수는 함수 인클로저에서 계산되므로'hist (..., xlim = range (breaks)) '를 실행하면 작동하지 않습니다. 'do.call'을 사용하여 설정하고자하는 다른 매개 변수가있는 경우'hist()'에 대한 호출을 수정할 수 있습니다. 그러나 조건 적으로 조건을 바꿀 경우에는 여전히'if()'블록이 필요합니다. 매개 변수. – MrFlick