【问题标题】:Trouble constructing a function properly in R在 R 中正确构造函数时遇到问题
【发布时间】:2021-07-30 20:21:48
【问题描述】:

在下面的代码中,我试图在我正在使用的“常规季节”数据集的“类别”列中找到每个项目的平均正确分数。

rs_category <- list2env(split(regular_season, regular_season$category), 
        .GlobalEnv)
unique_categories <- unique(regular_season$category)

for (i in unique_categories)
  Mean_[i] <- mean(regular_season$correct[regular_season$category == i], na.rm = TRUE, .groups = 'drop')
  eapply(rs_category, Mean_[i])
print(i)

不过,我无法让它工作。我已经创建了类别中的项目列表作为子数据集,并且分别(我认为)我已经创建了类别中唯一项目的向量,以便运行 for 循环。我感觉问题可能与我如何定义平均函数有关,因为“eapply()”行发生错误并告诉我“Mean_[i]”不是一个函数,但我想不出还有什么其他方法来定义函数。如果有人可以提供帮助,我将不胜感激。

【问题讨论】:

标签: r list for-loop


【解决方案1】:

问题是Mean_ 没有i 名称。在下面的代码中,我们将对象'Mean_'初始化为numeric类型,length与'unique_categories'的长度相同,然后遍历'unique_categories'的序列,得到'正确'的子集,应用mean 函数并将其存储为“Mean_”的ith 值

Mean_ <- numeric(length(unique_categories))
for(i in seq_along(unique_categories)) {
      Mean_[i] <- mean(regular_season$correct[regular_season$category 
                           == unique_categories[i]], na.rm = TRUE)
   }

如果我们需要使用更快的执行速度,请使用data.table

library(data.table)
setDT(regular_season[,  .(Mean_ = mean(correct, na.rm = TRUE)), category]

或使用collapse

library(collapse)
fmean(slt(regular_season, category, correct), g = category)

【讨论】:

    【解决方案2】:

    而不是拆分数据集并使用for 循环 R 具有用于此类分组操作的功能,我认为可以在此处使用。您可以为每个唯一组(值)应用一个函数。

    library(dplyr)
    
    regular_season %>%
      group_by(category) %>%
      summarise(Mean_ = mean(correct, na.rm = TRUE)) -> result
    

    这为每个category 提供correct 的平均值,其中result$Mean_ 是您要查找的向量。

    在基础 R 中,这可以通过 aggregate 解决。

    result <- aggregate(correct~category, regular_season, mean, na.rm = TRUE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多