R 无法使用map_dbl进行汇总

R 无法使用map_dbl进行汇总,r,tidyverse,R,Tidyverse,我试图对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\u dbl吗?以下内容不起作用,因为您没有指定如果变量不是数值变量,R应

我试图对
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\u dbl
吗?

以下内容不起作用,因为您没有指定如果变量不是数值变量,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

您还可以查看
map\u if
,其中您可以指定要应用于
TRUE
FALSE
条件的单独函数

purrr::map_if(iris, is.numeric, sum, .else = function(x) return(NA))

#$Sepal.Length
#[1] 876.5

#$Sepal.Width
#[1] 458.6

#$Petal.Length
#[1] 563.7

#$Petal.Width
#[1] 179.9

#$Species
#[1] NA