考虑这个简单的例子
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
产生错误。我在这里错过了什么? 谢谢!
答案 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(.))