R select 管道中列表中的项目
R select items from list in pipeline
我想在使用 purrr:map 应用另一个函数之前从列表中按索引 select 项目。我尝试了以下方法,但找不到有效的方法。
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)
一个选项是
library(tidyverse)
keep(dat, seq_along(dat) %in% 1:2) %>%
map(mean)
#[[1]]
#[1] 2
#[[2]]
#[1] 5
或map
与pluck
map(1:2, ~ pluck(dat, .x) %>%
mean)
或 assign_in
assign_in(dat, 3, NULL) %>%
map(mean)
或者另一种选择是 map_if
map_if(dat, is.numeric, mean, .else = ~ NULL) %>%
discard(is.null)
或 discard
discard(dat, is.character) %>%
map(mean)
或 Filter
和 map
Filter(is.numeric, dat) %>%
map(mean)
注意:所有这些都获得了预期的输出。
我们可以使用`[`
并做
dat %>%
.[c(1, 2)] %>%
map(., mean)
#[[1]]
#[1] 2
#[[2]]
#[1] 5
或者按照 magrittr
包的方式定义别名
extract <- `[` # literally the same as magrittr::extract
dat %>%
extract(c(1, 2)) %>%
map(., mean)
也可以写成
dat %>% `[`(c(1,2))
感谢@Moody_Mudskipper
我想在使用 purrr:map 应用另一个函数之前从列表中按索引 select 项目。我尝试了以下方法,但找不到有效的方法。
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)
一个选项是
library(tidyverse)
keep(dat, seq_along(dat) %in% 1:2) %>%
map(mean)
#[[1]]
#[1] 2
#[[2]]
#[1] 5
或map
与pluck
map(1:2, ~ pluck(dat, .x) %>%
mean)
或 assign_in
assign_in(dat, 3, NULL) %>%
map(mean)
或者另一种选择是 map_if
map_if(dat, is.numeric, mean, .else = ~ NULL) %>%
discard(is.null)
或 discard
discard(dat, is.character) %>%
map(mean)
或 Filter
和 map
Filter(is.numeric, dat) %>%
map(mean)
注意:所有这些都获得了预期的输出。
我们可以使用`[`
并做
dat %>%
.[c(1, 2)] %>%
map(., mean)
#[[1]]
#[1] 2
#[[2]]
#[1] 5
或者按照 magrittr
包的方式定义别名
extract <- `[` # literally the same as magrittr::extract
dat %>%
extract(c(1, 2)) %>%
map(., mean)
也可以写成
dat %>% `[`(c(1,2))
感谢@Moody_Mudskipper