2017-01-25 1 views
0

ich die folgende Funktion habe 9 Datenrahmen zurück:R-Funktion mehr Daten zurückzuRahmen

split_data <- function(dataset, train_perc = 0.6, cv_perc = 0.2, test_perc = 0.2) 

{ 

m <- nrow(dataset) 
n <- ncol(dataset) 

#Sort the data randomly 
data_perm <- dataset[sample(m),] 

#Split data into training, CV, and test sets 
train <- data_perm[1:round(train_perc*m),] 
cv <- data_perm[(round(train_perc*m)+1):round((train_perc+cv_perc)*m),] 
test <- data_perm[(round((train_perc+cv_perc)*m)+1):round((train_perc+cv_perc+test_perc)*m),] 

#Split sets into X and Y 
X_train <- train[c(1:(n-1))] 
Y_train <- train[c(n)] 

X_cv <- cv[c(1:(n-1))] 
Y_cv <- cv[c(n)] 

X_test <- test[c(1:(n-1))] 
Y_test <- test[c(n)] 

} 

Mein Code läuft gut, aber kein Datenrahmen erstellt werden. Gibt es eine Möglichkeit, dies zu tun? Dank

+0

Ihre Funktion gibt nichts zurück – Cath

+0

Kann eine Funktion mehrere Datenrahmen zurückgeben? – Ben

+1

ja, können Sie sie in eine Liste setzen können: 'return (Liste (DF1, DF2, ...))' (Sie können sie nennen, wenn Sie bevorzugen) – Cath

Antwort

1

Dieser speichert die neun data.frames in ein list

split_data <- function(dataset, train_perc = 0.6, cv_perc = 0.2, test_perc = 0.2) { 

    m <- nrow(dataset) 
    n <- ncol(dataset) 

    #Sort the data randomly 
    data_perm <- dataset[sample(m),] 

    # list to store all data.frames 
    out <- list() 

    #Split data into training, CV, and test sets 
    out$train <- data_perm[1:round(train_perc*m),] 
    out$cv <- data_perm[(round(train_perc*m)+1):round((train_perc+cv_perc)*m),] 
    out$test <- data_perm[(round((train_perc+cv_perc)*m)+1):round((train_perc+cv_perc+test_perc)*m),] 

    #Split sets into X and Y 
    out$X_train <- train[c(1:(n-1))] 
    out$Y_train <- train[c(n)] 

    out$X_cv <- cv[c(1:(n-1))] 
    out$Y_cv <- cv[c(n)] 

    out$X_test <- test[c(1:(n-1))] 
    out$Y_test <- test[c(n)] 

    return(out) 

} 
+0

Dank hilft, das ist genau das, was ich erforderlich – Ben

1

Wenn Sie Datenrahmen wollen am Ende im Arbeitsbereich erstellt werden, das ist, was Sie tun müssen: -

1) Create empty variable (which may equal out to NULL i.e. Y_test = NULL) in your R console. 
2) Assign "<<-" operator to the same variables created in Step 1 inside your function i.e. 

X_train <<- train[c(1:(n-1))] 
Y_train <<- train[c(n)] 

X_cv <<- cv[c(1:(n-1))] 
Y_cv <<- cv[c(n)] 

X_test <<- test[c(1:(n-1))] 
Y_test <<- test[c(n)] 

Damit können Sie auf die neu erstellten Daten von Ihrem Arbeitsbereich aus zugreifen.

Verwandte Themen