如何使用purrr与lubridate

时间:2018-02-20 21:51:03

标签: r purrr

考虑这个简单的例子

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

这是因为您添加了.如果删除.,您的代码就可以正常运行。在这种情况下,您不必包含~并指示purrr::map将其视为函数调用中包含其参数的函数。

尝试以下方法:

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