R 从管道列表中选择项目

Wie*_*314 2 r list subset magrittr purrr

我想在使用 purrr:map 对其应用另一个函数之前按索引从列表中选择项目。我尝试了以下方法,但找不到有效的方法。

require(dplyr)
require(purrr)

dat <- list(1:3,
     4:6,
     letters[1:3])

# I can select one item

dat[1]

# I can select two items

dat[c(1,2)]

# But how can I do this in a pipeline by index?

dat %>% map(mean)

dat %>%
  filter(c(1,2)) %>%
  map(mean)

dat %>%
  keep(1,2) %>%
  map(mean)

dat %>%
  select(1,2) %>%
  map(mean)
Run Code Online (Sandbox Code Playgroud)

mar*_*kus 5

我们可以使用`[`和做

dat %>% 
 .[c(1, 2)] %>%
 map(., mean)
#[[1]]
#[1] 2

#[[2]]
#[1] 5
Run Code Online (Sandbox Code Playgroud)

或者按照magrittr包的方式定义别名

extract <- `[` # literally the same as magrittr::extract
dat %>% 
  extract(c(1, 2)) %>% 
  map(., mean)
Run Code Online (Sandbox Code Playgroud)

也可以写成

dat %>% `[`(c(1,2))
Run Code Online (Sandbox Code Playgroud)

感谢@Moody_Mudskipper