在 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)
我们不需要这个包。使用 rep
和 split
会更快
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)
我正在尝试了解具有 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)
我们不需要这个包。使用 rep
和 split
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)