R中的地图和行

时间:2019-12-03 11:11:53

标签: r dplyr tidyverse purrr

这更多是一个教育问题,我正在尝试绕过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本身是否有更好的方法

1 个答案:

答案 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,因为我们一次只累加一列,尽管使用它仍然可以给出答案。