我具有以下功能来返回9个数据帧:
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)] }
我的代码运行良好,但是没有创建数据框。有没有办法做到这一点?谢谢
这会将九个存储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) }