首页 > 解决方案 > for循环内的函数有问题

问题描述

我创建了一组对象:

rs_s = {
rs_s_72 <- regular_season %>% filter(season == 72)
rs_s_73 <- regular_season %>% filter(season == 73)
rs_s_74 <- regular_season %>% filter(season == 74)
rs_s_75 <- regular_season %>% filter(season == 75)
rs_s_76 <- regular_season %>% filter(season == 76)
rs_s_77 <- regular_season %>% filter(season == 77)
rs_s_78 <- regular_season %>% filter(season == 78)
rs_s_79 <- regular_season %>% filter(season == 79)
rs_s_80 <- regular_season %>% filter(season == 80)
rs_s_81 <- regular_season %>% filter(season == 81)
rs_s_82 <- regular_season %>% filter(season == 82)
rs_s_83 <- regular_season %>% filter(season == 83)
rs_s_84 <- regular_season %>% filter(season == 84)
rs_s_85 <- regular_season %>% filter(season == 85)
}

然后,我尝试使用此代码取每个对象中“正确”列的平均值,但它似乎不起作用:

for (i in rs_s){
 mean('correct')
  print(mean)
}

如果有人知道,有人可以告诉我哪里可能出错了,我该如何解决?

编辑:我还查看了该站点和其他站点上的其他几个问题,但似乎没有一个与这个问题特别相关。

标签: rfor-loop

解决方案


如果我们在全局环境中创建了以 'rs_s_' 开头的对象,则根据模式将这些对象获取mget到 alist中,提取correct列并mean通过遍历listwith 来获取sapply

sapply(mget(ls(pattern = '^rs_s_\\d+$')), function(x) mean(x$correct))

根据语法,使用 'season' 而不是filtering 执行 group_by 可能会更好,从而避免创建多个对象,然后收集这些对象以计算mean

library(dplyr)
regular_season %>%
    group_by(season) %>%
    summarise(Mean = mean(correct, na.rm = TRUE), .groups = 'drop')

如果我们只需要mean特定的“季节”,那么filtergroup_by

regular_season %>%
   filter(season %in% 72:85) %>%
   group_by(season) %>%
   summarise(Mean = mean(correct, na.rm = TRUE), .groups = 'drop') 

推荐阅读