如何将 purrr 与 lubridate 一起使用

how to use purrr with lubridate

考虑这个简单的例子

mydata
List of 3
 $ : chr "11/12/2015"
 $ : chr "21/10/2015"
 $ : chr "04/09/2015"

我想将 lubridate::dmy() 应用于此列表中的每个字符。 简直运行

mydata %>% map(., lubridate::dmy(.))
Error: Can't convert a double vector to function

产生错误。我在这里错过了什么? 谢谢!

这是因为您包含了 . 如果您删除 .,您的代码将正常工作。在这种情况下,您不必包含 ~ 并指示 purrr::map 将其视为一个函数,其参数包含在函数调用中。

尝试以下操作:

mydata %>% 
purrr::map(.x = ., 
.f = ~ lubridate::dmy(.))

这是错误的,因为 . 在不同的上下文中意味着两件事。在管道中,它表示管道中的前一个对象,但在 purrr 中,它可以是一个 shorthand 表示进入要映射的函数的对象。当包含 ~ 时,它只代表第二个。

上述解决方案应该有效,但这些也应该有效。我不认为你需要包含 .x = . 因为它是第一个参数并且应该通过管道传递。同样,使用可重现的示例更容易检查。

mydata %>% map(function(x) dmy(x))
mydata %>% map(~ dmy(x))