在 R 中的函数中调用过滤器(子集)两次

Call filter (subset) twice in a function in R

我想编写一个使用 dplyr::filter() 函数将我的数据子集化为 10 年时间片的函数。我的函数如下所示,但这似乎只是 return 第二次调用 filter() 的值。

如何编写一个函数将数据分成多个时间段,然后汇总数据?

示例数据

aggr.data <- dput(head(aggr.data))
structure(list(time = c(2020, 2020, 2020, 2020, 2020, 2020), 
dayofyr = 1:6, NPP = c(0, 0, 0, 0, 0, 0), 
soc = c(2582.0408, 2582.3461, 2582.7023, 2582.9979, 2583.1896, 2583.4067)),
.Names = c("time", "dayofyr", "NPP", "soc"), 
row.names = c(NA, 6L), class = "data.frame")

在这里,我尝试过滤 2020 年至 2029 年的时间段,然后过滤 2030 年至 2039 年的时间段。然后我希望能够通过这些 'subsets' 汇总数据。

函数

 testFunction <- function(x) {
      time2020 <- filter(x, time >= 2020, time <= 2029.92);
      time2040 <- filter(x, time>= 2030, time <= 2039.92);
      test1 <- summarise(time2020, mean.soc = mean(soc), mean.npp = sum(NPP/20));
      test2 <- summarise(time2040, mean.soc = mean(soc), mean.npp = sum(NPP/20))
    }

运行数据上的函数

testFunction(aggr.data)

既然没人回答,我就根据bouncyball的评论来回答。 该函数需要 list() 参数。

   testFunction <- function(x) {
          time2020 <- filter(x, time >= 2020, time <= 2029.92);
          time2040 <- filter(x, time>= 2030, time <= 2039.92);
          test1 <- summarise(time2020, mean.soc = mean(soc), mean.npp = sum(NPP/20));
          test2 <- summarise(time2040, mean.soc = mean(soc), mean.npp = sum(NPP/20))   
 list('test1' = test1, 'test2' = test2)
        }