有没有一种方法可以从一个函数返回两个单独的列表?

时间:2019-12-14 20:31:02

标签: r

我有一个看起来像这样的数据框

value <- c(1:1000)
group <- c(1:5)
df <- data.frame(value,group)

我想在数据框上使用此功能

myfun <- function(){
  wz1 <- df[sample(nrow(df), size = 300, replace = FALSE),]
  wz2 <- df[sample(nrow(df), size = 10, replace = FALSE),]
  wz3 <- df[sample(nrow(df), size = 100, replace = FALSE),]
  wz4 <- df[sample(nrow(df), size = 40, replace = FALSE),]
  wz5 <- df[sample(nrow(df), size = 50, replace = FALSE),]

  wza <- rbind(wz1,wz2, wz3, wz4, wz5)
  wza_sum <- aggregate(wza, by = list(group_ID=wza$group), FUN = sum)
  return(list(wza = wza,wza_sum = wza_sum))
}

现在我要返回一个包含wza和wza_sum的列表。

有没有一种方法可以返回两个单独的列表,其中一个包含wza,另一个包含wza_sum?

aggregate()函数需要位于myfun()中,因为我想使用100次复制myfun()

dfx <- replicate(100,myfun(),simplify = FALSE,)

1 个答案:

答案 0 :(得分:0)

一个函数应该接受一个输入(或一组输入),并且只返回一个输出(或一组输出)。考虑

的简单例子
myfunction <- function(x) {
  x
  x ** 2
}

除非您提前调用 return() (which you usually don't),否则将返回最后一个对象。实际上,如果您尝试返回两个对象,例如return(1,2) 你遇到了

<块引用>

返回错误(1, 2):不允许多参数返回

这就是为什么@StupidWolf 在评论中提出的解决方案是最合适的,您使用 return(list(wza = list(wza),wza_sum = list(wza_sum)))。然后,如果合适,您必须执行必要的后处理拆分列表。