在 R 中使用映射函数和向量

Working with map function and vectors in R

我正在尝试了解具有 purrr::map() 函数的向量的工作原理。我有一个向量 c("cat", "fish", "hamster"),我想将它转换成以下输出:

[[1]]
[1] "cat" "cat" "cat"

[[2]]
[1] "fish" "fish"

[[3]]
[1] "hamster"

不确定我应该使用哪个 map() 函数以及如何使用它。我发现它是第一个元素重复三次,第二个元素重复两次,第三个元素重复一次。

您可以使用:

x <- c("cat", "fish", "hamster")
map2(x, 3:1, rep)

我们不需要这个包。使用 repsplit

会更快
v2 <- rep(v1, length(v1):1)
split(v2, v2)
#$cat
#[1] "cat" "cat" "cat"

#$fish
#[1] "fish" "fish"

#$hamster
#[1] "hamster"

或使用imap

library(purrr)
rev(imap(rev(v1), ~ rep(.x, .y)))

数据

v1 <- c("cat", "fish", "hamster")

另一个基础 R 选项使用 Map + replicate

> Map(replicate, rev(seq_along(v)), v)
[[1]]
[1] "cat" "cat" "cat"

[[2]]
[1] "fish" "fish"

[[3]]
[1] "hamster"

在基础 R 中你可以使用 mapply:

v <- c("cat", "fish", "hamster")
mapply(rep, v, 3:1)

pmap:

purrr::pmap(list(v, 3:1), rep)