如何解决无法使用 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
吗?
解决方法
以下不起作用,因为如果变量不是数字变量,您没有指定 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_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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。