2016-07-19 15 views
1

Es scheint mir, dass ich, dass wir nicht etwas über Funktionen in R. verstehen haben Nehmen wir ein einfaches Datenrahmen:eine Spalte in Datenrahmen Löschen-Funktion

df <- data.frame(A = c(1, 2), B = c(3, 4)) 

Eine Spalte beispielsweise auf diese Weise löschen :

df$A <- NULL 

ich versuchte es in Funktion einpacken und auf unerklärliche Weise würde es nicht funktionieren:

delete_col <- function(df) { 
    df$A <- NULL 
} 
delete_col(df) 

Kann mir jemand das erklären?

Antwort

2
delete_col <- function(df) { 
    df$A <- NULL 
    return(df) 
} 
delete_col(df) 

Dies wird das Ergebnis geben, das Sie suchen. Wenn Sie die Änderungen an df beibehalten möchten, verwenden Sie df<-delete_col(df)

Ihre Funktion gibt nichts aus. Ihre Funktion löscht die Spalte aus df, aber sie gibt den resultierenden Datenrahmen niemals aus. Wenn Sie return(df)10 verwenden, geben Sie der Funktion eine Ausgabe, df.

2

Der Grund, warum dies nicht funktioniert, ist, dass Sie tatsächlich eine Spalte aus einer Parametervariablen löschen, die nur eine Kopie des tatsächlichen Datenrahmens ist, den Sie an die Funktion übergeben haben. Wenn Sie die Spalte Löschen zu wollen „kleben“ können Sie den übergeordneten Bereich Zuweisungsoperator (<<-):

delete_col <- function(df) { 
    df$A <<- NULL 
} 
delete_col(df) 

Durch die Verwendung von <<- statt <- wird R die Zuordnung zu den Datenrahmen in dem übergeordneten Bereich machen , von dem Sie die Funktion aufgerufen haben, und daher wird die Spalte gelöscht, wenn die Funktion zurückkehrt.

+0

Zum ersten Mal stoße ich auf den << - Operator. Gut zu wissen, dass so etwas existiert. –

Verwandte Themen