如何将 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))
考虑这个简单的例子
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))