关于purrr::walk的困惑
我正试着跟上咕噜声::走路,但感觉有点困惑。请找出玩具的例子,并告诉我哪里出了问题关于purrr::walk的困惑,r,purrr,R,Purrr,我正试着跟上咕噜声::走路,但感觉有点困惑。请找出玩具的例子,并告诉我哪里出了问题 library(purrr) # ordinary lapply lp = 1 lp2 <- lapply(1:10, function(c) { lp <<- lp + c print(lp) }) %>% invisible lp # 56 lp2 # a list up to 56 # purrr::map mp = 1 mp2 <- map
library(purrr)
# ordinary lapply
lp = 1
lp2 <-
lapply(1:10, function(c) {
lp <<- lp + c
print(lp)
}) %>% invisible
lp # 56
lp2 # a list up to 56
# purrr::map
mp = 1
mp2 <-
map(.x = 1:10,
.f = function(c) {
mp <<- mp + c
print(mp[[1]])
}
) %>% invisible
mp # 56
mp2 # a list up to 56
wk = 1
wk2 <-
walk(.x = 1:10,
.f = function(c) {
wk <<- wk +c
print(wk)
return(wk)
})
wk #56
wk2 # a vector up to 10
# that confuses me, shouldn't it be as much as wk2?
多亏了@JosephWood,我才发现我没有仔细阅读这份文件。 我爱这个社区 正如@andrew_reece所建议的,以下是我对这个案例的理解 purrr::walk就是这样命名的,它一步一步地进行。它所关心的是完成所有指定的步骤。至于结果,结果是当函数运行时发生的
副作用
因此,返回值只是宣布“我已经完成了您要求的步骤”
wk=1
wk2根据,walk
用于f
的副作用并返回输入。在您的示例中,输入是长度为10的向量。前两个示例中的invisible
调用不会像walk
那样强制返回其输入。您还可以查看源代码。。这应该有助于你理解。是的,你是对的。我应该更仔细地阅读这份文件。非常感谢,不用担心。我的目标是文档,如果进展不顺利,我会查看源代码。tidyverse
文档通常都很不错。很高兴听到您找到了问题的答案。你会考虑在这个答案中添加你的编码问题的实际解决方案吗?事实上,这与其说是一个真正的答案,不如说是一个评论。如果没有一个明确的编码解决方案,其他来此岗位学习的人可能无法立即理解如何解决他们自己的问题。
library(microbenchmark)
microbenchmark(lp2, mp2, wk2, times = 10000)
#> microbenchmark(lp2, mp2, wk2, times = 10000)
#Unit: nanoseconds
# expr min lq mean median uq max neval
# lp2 39 47 55.1047 49 56 15738 10000
# mp2 40 47 59.2899 49 56 15661 10000
# wk2 39 47 57.4763 50 56 15629 10000
wk = 1
wk2 <-
walk(.x = 1:10,
.f = function(c) {
wk <<- wk +c ## do something while walking,
## and pass out the result to tell what you've done.
print(wk)
return(wk)
})
wk #56 <- the final result of the side effect.
wk2 # 1 2 3 4 5 6 7 8 9 10
# I'd finished the 10 steps you asked.