2017-12-24 18 views
0

Ich bin neu in R und arbeite an dem Schreiben einiger cooler Funktionen, während ich parallel Statistiken lerne. Ich versuche eine Funktion zu machen, die einen numerischen Vektor nimmt, die "root mean squared" -Operationen durchführt und dann die Ausgabe im Wesentlichen denselben Vektor zurückgibt, wobei die möglichen Ausreißer entfernt werden.R-Programmierfunktion

Zum Beispiel, wenn der Vektor c (2,4,9,10,100) die resultierenden RMS wären etwa 37.

Daher mag ich die Ausgabe den gleichen Vektor mit dem möglichen Ausreißer zurückzukehren (in dieser Fall, 100) aus dem Datensatz entfernt. Also das Ergebnis wäre 2, 4, 9, 10

Ich habe meinen Code unten, aber der Ausgang funktioniert nicht. Ich habe es auf 2 verschiedene Arten versucht. Alles bis zu der Zeile, die RMS Final funktioniert. Aber darunter nicht.

Wie kann ich diese Funktion so ändern, dass sie funktioniert? Auch als Bonus, und dies könnte eine Menge Fragen, aber basierend auf meiner Codierung unten, wäre jeder Tipp für einen Anfänger auf die Herstellung von Funktionen etwas, wofür ich auch dankbar wäre. Vielen Dank!

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) 
} 

Antwort

1

Versuchen Sie, in den ersten Zeilen der RMS-Funktion zu folgen.

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

Nun haben Sie RMS_x sans die Ausreißer.

Die Boxplot-Funktion hat eine Möglichkeit, die Ausreißer zu bestimmen. Hier verwende ich das, um sie zu entfernen.

+0

Ich wollte es als Übung zu lernen, um R zu lernen und nicht wirklich etwas Besonderes zu erreichen. Und deshalb möchte ich nicht wirklich einen Boxplot verwenden. Ich möchte nur lernen, wie es funktioniert, so wie ich es mir vorgestellt habe. Aber ich danke dir für die Mühe. – Mitsugi