这更多是一个教育问题,我正在尝试绕过R中的map函数(请问是否已经过时了)。但是我想要的是所有数字列的总和,而我正在尝试
iris %>% select(map(c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width')),rowSums,vars=colnames(.))
收到的错误是
Error in as_mapper(.f, ...) : argument ".f" is missing, with no default
我知道它的错,但是我想强调这个背后的基本概念/基本原理,而不仅仅是获得正确的答案,几乎没有什么解释真正有帮助。另外,请让我知道tidyverse本身是否有更好的方法
答案 0 :(得分:2)
尽管对此的直接回答是
library(dplyr)
library(purrr)
iris %>% summarise_if(is.numeric, sum)
或
cols <- c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width')
iris %>% summarise_at(cols, sum)
但是,如果您想使用map
进行此操作,则可以
map(cols, ~iris %>% select(.x) %>% sum)
#[[1]]
#[1] 876
#[[2]]
#[1] 459
#[[3]]
#[1] 564
#[[4]]
#[1] 180
或
map_dbl(cols, ~iris %>% select(.x) %>% sum)
#[1] 876 459 564 180
另一个变种可以是
map(cols, ~iris %>% summarise_at(.x, sum))
#[[1]]
# Sepal.Length
#1 876
#[[2]]
# Sepal.Width
#1 459
#[[3]]
# Petal.Length
#1 564
#[[4]]
# Petal.Width
#1 180
这里不需要colSums
,因为我们一次只累加一列,尽管使用它仍然可以给出答案。