在函数

时间:2018-05-29 13:39:41

标签: r function dataframe

我对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)

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

凯文

1 个答案:

答案 0 :(得分:5)

您可以将两个返回值都放在一个列表中并返回该值。 我还将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,]