安全地保存每次迭代的当前时间(purrr :: map())

Save current time for each iteration in safely(purrr::map())

如何向 safely(map()) 的输出添加额外的列表元素?

正在安全地输出一个列表,所以我应该能够append()一个新的列表元素?

我的尝试失败了:

library(tidyverse)

mtcars |> 
    mutate(result_var = 
            map(hp,
                safely(
                    function(x) 
                    {
                    2+2 # long operation I wish to know the finish time
                    }
                ) 
         ) |> append(Sys.time())
        ) |> 
    head()
#> Error: Problem with `mutate()` input `result_var`.
#> x Input `result_var` can't be recycled to size 32.
#> i Input `result_var` is `append(...)`.
#> i Input `result_var` must be size 32 or 1, not 33.

你可以使用-

library(tidyverse)

mtcars |> 
  mutate(result_var = map(hp, safely(function(x) {
    list(2+2 ,# long operation I wish to know the finish time
         Sys.time() 
         )
      }
    )
  )
) -> result

这会 return -

head(result$result_var, 2)

#[[1]]
#[[1]]$result
#[[1]]$result[[1]]
#[1] 4

#[[1]]$result[[2]]
#[1] "2022-05-20 20:03:49 IST"


#[[1]]$error
#NULL


#[[2]]
#[[2]]$result
#[[2]]$result[[1]]
#[1] 4

#[[2]]$result[[2]]
#[1] "2022-05-20 20:03:49 IST"


#[[2]]$error
#NULL