Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于purrr::walk的困惑_R_Purrr - Fatal编程技术网

关于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.