首页 > 解决方案 > 在函数内部创建训练和测试 df

问题描述

我对 R 还是很陌生,并且在设置一个可以重复调用不同种子值的函数时遇到了一些困难(我最终想为 5 个随机种子调用 5 次)。我所做的就是将一个 df 分成 2 个 df。函数中的代码独立工作,但是当我将它放在一个函数中以使用 set_data(n) 调用它时,代码运行,但没有返回任何内容。我认为问题在于该函数似乎不知道要返回什么。我尝试过 return(df_train) 和 return(df_test),但这种努力没有成功。

df_n 是我想分成 df_train 和 df_test dfs 的规范化数据帧。我想知道函数中是否可以访问 df_n,或者我需要以某种方式将 df_n 传递给函数???

set_data <- function(n){
  set.seed(n)
  train_percent = 0.6667
  sample_size <- floor(train_percent * nrow(df_n))
  train_ind <- sample(seq_len(nrow(df_n)), size = sample_size)
  df_train <- df_n[train_ind,]
  df_test <- df_n[-train_ind,]
}

n=1
set_data(1)

任何关于如何返回两个数据帧以便我可以在此函数之外使用它们的想法将不胜感激。

凯文

标签: rfunctiondataframe

解决方案


您可以将两个返回值放在一个列表中并返回它。我还将 data.frame 包含在函数调用中。然后你可以输入任何data.frame。

df_n <- data.frame(
  x = runif(100,1,100)
)

set_data <- function(df_n, n){
  set.seed(n)
  train_percent = 0.6667
  sample_size <- floor(train_percent * nrow(df_n))
  train_ind <- sample(seq_len(nrow(df_n)), size = sample_size)
  df_train <- df_n[train_ind,]
  df_test <- df_n[-train_ind,]
  return(list(df_train=df_train, df_test=df_test))
}

n=1
result <- set_data(df_n, n)
result$df_train
result$df_test

如果要将 df_train 和 df_test 分配给全局环境,则应将这些行更改为下面的代码。但不建议这样做,您应该尽可能避免它。

  df_train <<- df_n[train_ind,]
  df_test <<- df_n[-train_ind,]

推荐阅读