我有一个看起来像这样的数据框
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,)
答案 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)))
。然后,如果合适,您必须执行必要的后处理拆分列表。