首页 > 解决方案 > 示例函数不适用于 purrr::rerun 和管道?

问题描述

我在 purrr::rerun 中观察到一些奇怪的行为,当它与%>%我无法理解的一起使用时。

如果我跑,

library(purrr)
sample(1:30, 3) %>% rerun(4, .)

它会回来,

# 1 24 5
# 1 24 5
# 1 24 5
# 1 24 5

显然这不是我想要的。

但是,如果我在没有 的情况下运行类似的代码%>%,它实际上会按预期工作。

rerun(4, sample(1:30, 3))
# 17 5 20
# 13 3 6
# 22 25 3
# 20 30 29

我不明白为什么行为不同。有人可以解释吗?提前致谢。

标签: rpurrrmagrittr

解决方案


调用函数的顺序很重要。在第一种情况下,您从 30 个元素中选择 3 个元素并调用它 4 次。就像在做

temp <- sample(1:30, 3)
purrr::rerun(4, temp)

所以不管你调用它4次还是1000次,它的值temp都不会改变。

而在第二种情况下,您调用sample(1:30, 3)了 4 次,每次都会给您不同的结果。


推荐阅读