2017-12-24 15 views
0

私はRを初めて使い、並行して統計を学びながらいくつかのクールな関数を書く作業をしています。私は、数値ベクトルを取る関数を作ろうとしている、 "平方平均2乗"演算を実行し、可能性のある外れ値が除去された出力が本質的に同じベクトルを返すようにする。例えばRプログラミング関数(実数二乗のサブセットを返す)

ベクターは、C(2,4,9,10,100)である場合、得られたRMSは、約37

したがって、私は、出力(の可能な外れ値と同じベクトルを返すようにしたいであろうこのケース、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関数には、アウトライヤーを決定する方法があります。ここでは、私はそれらを削除するために使用しています。

+0

私はRを学ぶための練習としてそれを修正したいと思いました。そして、私は本当にボックスプロットを使用したくありません。私はそれが私が想像していたように動作させる方法を学びたいだけです。しかし、私は努力に感謝します。 – Mitsugi

関連する問題