首页 > 解决方案 > 无法使用 map_dbl 进行总结

问题描述

我试图总结 中的所有数字变量iris,而不是总结非数字变量。

但是,这不起作用:

iris %>% map_dbl(function(x) if(is.numeric(x)) sum(x))

为什么这不起作用?如果我先删除非数字变量,它会起作用,如下所示

iris[1:4] %>% map_dbl(function(x) if(is.numeric(x)) sum(x))

我们还能用map_dbl在这种情况下吗?

标签: rtidyverse

解决方案


以下内容不起作用,因为您没有指定如果变量不是数字变量,R 应该做什么。这就是您遇到错误的原因。

iris %>% map_dbl(function(x) if(is.numeric(x)) sum(x))

但是,如果您指定else,它将起作用:

iris %>% map_dbl(function(x) if(is.numeric(x)) sum(x) else NA)
Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
       876.5        458.6        563.7        179.9           NA 

如果您过滤掉非数字变量,它将起作用,因为 R 不需要检查else. if条件总是会满足的。

iris[1:4] %>% map_dbl(function(x) if(is.numeric(x)) sum(x))

或者,您可以使用dplyr

library(dplyr)
iris %>% summarize(across(is.numeric, sum))
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1        876.5       458.6        563.7       179.9

推荐阅读