2017-01-18 15 views
3

Ich mag einen Datenrahmen innerhalb der Funktion erstellen, dieWie kann ich Spaltennamen in einer R-Funktion übergeben?

QPP<-function(dat,xvar,yvar){ 
    varx <<- dat[,c(xvar)] 
    vary <<- dat[,c(yvar)] 
    a <- cbind(varx,vary) 
    a <- as.data.frame(a) 
    #Perform some operations 
} 

QPP(dat=d,xvar = area,yvar = f.ecdf) 

Aber ich erhalte eine Fehlermeldung eine Auswahl der Spalten in dem Datenrahmen d:

Fehler bei eval (ausdr, envir, enclos): Argument fehlt, ohne Standard

  1. Wie kann ich dieses Problem beheben?
  2. Kann ich alternativ die Spaltennamen in einem Schritt auswählen und dann auswählen und dann verbinden? Ich bin mir nicht sicher, wie ich die Spaltennamen weitergeben soll.

    dput(droplevels(head(d,10))) 
    structure(list(area = c(96.8656, 96.8656, 562.0274, 117.5855, 
    117.5855, 117.5855, 117.5855, 117.5855, 117.5855, 117.5855), 
    tp = c(1.5, 1, 0.5, 4.5, 6, 8.25, 4.25, 5.75, 10.75, 20.25 
    ), f.ecdf = c(0.887918176006819, 0.812380140634988, 0.760387811634349, 
    0.0372895802258683, 0.00809716599190283, 0.0310036224163648, 
    0.300660558278287, 0.441721713189857, 0.152354570637119, 
    0.386852759428937)), .Names = c("area", "tp", "f.ecdf"), row.names = c(NA, 
    -10L), class = c("data.table", 
    "data.frame")) 
    
+1

Versuchen Sie mit 'QPP (dat = d, xvar =" Bereich ", yvar =" f.ecdf ")' – HubertL

+0

Ich habe das versucht. Ich bekomme keinen Datenrahmen mit den Zahlen, sondern einen Datenrahmen mit dem Namensbereich und f.ecdf darin. Muss ich den Datensatz zuerst anhängen? – maximusdooku

+0

Warum machst du nicht nur 'dat [, c (" area "," f.ecdf ")]'? Warum die Notwendigkeit für diese Funktion? – aichao

Antwort

2

ist Ihre Funktion völlig in Ordnung. Es gibt ein Problem mit der Art, wie Sie das Argument übergeben. Sie sollen Strings als Variablennamen übergeben.

Versuchen Sie, diese QPP(dat=d,xvar = "area" ,yvar = "f.ecdf")

Nun, dies geschieht, weil, wenn Sie df[,c("col_name")] das Argument „col_name“ bemerken Zeichenfolge

Zu Ihrer Frage 2: Das ist, wie Sie es einen Schritt tun können cbind

ohne
QPP<-function(dat,xvar,yvar) 
{ 
colnames<- c(xvar, yvar) 
new_df <<- dat[, c(colnames)] 
} 

QPP(dat=d,xvar = "area" ,yvar = "f.ecdf") 
+0

Ich habe versucht, String zu übergeben. Ich bekomme das. Ich habe das Problem auch in den Kommentaren erwähnt. Nicht sicher, was das Problem ist ... new_df [1] "Bereich" "f.ecdf" – maximusdooku

+0

Okay, ich begann eine frische R-Sitzung und es funktioniert jetzt. Vielen Dank. Nicht sicher, warum es vorher nicht funktionierte .... – maximusdooku

+0

Okay, das habe ich entdeckt. Ich habe meinen Datensatz d mit fread importiert, was mir eine Datentabelle liefert. Sobald ich das stattdessen in einen Datenrahmen verwandelte, klingt dieses Problem nach. – maximusdooku

Verwandte Themen