2017-01-25 4 views
0

У меня есть следующие функции для возврата 9 кадров данных:функция R возвращать несколько кадры данных

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

} 

Мой код работает отлично, но никакие кадры данных не создаются. Есть ли способ сделать это? Благодаря

+0

Ваша функция ничего не возвращает – Cath

+0

Возможно ли, чтобы функция возвращала несколько кадров данных? – Ben

+1

Да, вы можете поместить их в список: 'return (list (df1, df2, ...))' (вы можете назвать их, если хотите) – Cath

ответ

1

Это будет хранить девять data.frames в 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

Спасибо, это именно то, что я необходимый – Ben

1

Если вы хотите dataframes быть созданы в рабочей области в конце концов, это то, что вам нужно сделать: -

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

Это позволит вам получить доступ к вновь созданным данным из вашего рабочего пространства.

Смежные вопросы