作为 dplyr 过滤功能的一部分,我如何循环遍历列表的元素并最终在 R 中打印方差?

How do I loop through the elements of a list as a part of dplyr's filter capability and eventually print variance in R?

我有一个名为 diamondsData 的数据框,我想以这样的方式操作它,它允许我计算 R 中每种切割类型的克拉大小方差。

我可以轻松地手动完成,如下所示:

diamondsData %>% 
  filter(cut=="Fair") %>% 
  select(carat) %>% 
  var()

我可以将“Fair in filter(cut=="Fair")”更改为 Ideal 等等,但我想自动执行此操作。我尝试创建一个列表并像这样循环:

y <- list("Ideal", "Premium", "Good", "Very Good", "Fair")

for(x in y){
  print(
    diamondsData %>% 
      filter(cut==x) %>% 
      select(carat) %>% 
      var()
  )
}

但这不起作用。这导致:

[

我在 R 中工作。有什么建议吗??

使用group_by而不是循环:

diamondsData %>%
group_by(cut) %>%
select(carat) %>%
summarize(variability = var(carat))

它应该给你一个数据框,其中包含每次切割中克拉的差异。

编辑以将 %>% var() 替换为 %>% summarise(....)

问题是 var 需要 vectorselect returns 需要 data.frame/tibble 作为输出(即使选择了一列)。我们可以使用 pull 将列作为 vector

for(x in y){
  print(
   diamondsData %>% 
   filter(cut==x) %>% 
    pull(carat) %>% 
     var(., na.rm = TRUE)
 )
}