2017-12-24 30 views
0

저는 R에 익숙하지 않으며 통계를 병렬로 학습하는 동안 멋진 기능을 작성하는 중입니다. 숫자 벡터를 취하고 "제곱 평균 제곱근"연산을 수행 한 다음 출력이 제거 된 가능한 외래 값과 동일한 벡터를 반환하도록하는 함수를 만들려고합니다. 벡터가 CR 프로그래밍 함수 (실수 평균 제곱의 하위 집합 반환)

예를 들어, (2,4,9,10,100) 결과 RMS 따라서 약 37

것, I는 출력에 (가능한 아웃 라이어와 같은 벡터를 반환 할 이 경우, 100)이 데이터 집합에서 제거되었습니다. 결과는 2, 4, 9, 10이됩니다.

아래 코드를 넣었지만 출력이 작동하지 않습니다. 나는 그것을 2 가지 다른 방법으로 시도했다. RMS 최종 작업이 끝나는까지 모두 다. 하지만 아래에서는 그렇지 않습니다.

어떻게하면이 기능을 수정할 수 있습니까? 또한, 보너스로, 그리고 이것은 많이 묻고 있지만 아래의 코딩을 기반으로, 기능을 만드는 초보자를위한 조언도 내가 감사할만한 것입니다. 정말 고마워!

RMS_x <- c(2,4,9,10,100) 

#Root Mean Squared Function - Takes a numeric vector 
RMS <- function(RMS_x){ 
    RMS_MEAN <- mean(RMS_x) 
    RMS_DIFF <- (RMS_x-RMS_MEAN) 
    RMS_DIFF_SQ <- RMS_DIFF^2 
    RMS_FINAL <- sqrt(sum(RMS_DIFF_SQ)/length(RMS_x)) 

    for(i in length(RMS_x)){ 
      if(abs(RMS_x[i]) > RMS_FINAL){ 
        output <- RMS_x[i]} 
        else {NULL} } 
    return(output) 
} 




#Root Mean Squared Function - Takes a numeric vector 
RMS <- function(RMS_x){ 
    RMS_MEAN <- mean(RMS_x) 
    RMS_DIFF <- (RMS_x-RMS_MEAN) 
    RMS_DIFF_SQ <- RMS_DIFF^2 
    RMS_FINAL <- sqrt(sum(RMS_DIFF_SQ)/length(RMS_x)) 

    #output <- ifelse(abs(RMS_x) > RMS_FINAL,RMS_x, NULL) 
    return(RMS_FINAL) 
} 

답변

1

RMS 기능의 첫 번째 줄에서 다음을 시도해보십시오.

RMS <- function(RMS_x) { 
    bp <- boxplot(RMS, plot = FALSE) 
    RMS_x <- RMS_x[!(RMS_x %in% bp$out)] 
    ... 

자, RMS_x의 아웃 라이어가 있습니다.

boxplot 함수에는 이상 치를 판별하는 f}이 있습니다. 여기, 나는 그것을 제거하기 위해 그것을 사용하고 있습니다.

+0

나는 R을 배우기위한 연습으로 그것을 고치고 특히 무엇인가를 성취하지는 않았 으면합니다. 그래서 저는 박스 플롯을 사용하고 싶지 않습니다. 나는 그것이 내가 상상했던 방식대로 작동시키는 법을 배우기를 원한다. 하지만 노력에 감사드립니다. – Mitsugi