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