简体   繁体   中英

R function to return multiple data frames

I have the following function to return 9 data frames:

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

}

My code runs fine, but no data frames are created. Is there a way to do this? Thanks

If you want dataframes to be created in the workspace at the end, this is what you'll need to do:-

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

This shall make you access the newly created data from your workspace.

This will store the nine data.frames in a 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)

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM