在传递给函数之前过滤 .x ~
filter .x before passing to function ~
我在 purrr 和 dplyr 链中有一个片段:
MAPE180 = map_dbl(TestData, ~Metrics::mape(.x %>% filter(TENURE == 180) %>% pull(CUMULATIVE_AMOUNT),
.x %>% filter(TENURE == 180) %>% pull(Prediction)))
这很好用。我想删除 .x %>% filter(TENURE == 180)
的重复项并尝试此操作,希望得到等效项:
MAPE180 = map_dbl(TestData %>% filter(TENURE == 180), ~Metrics::mape(.x$CUMULATIVE_AMOUNT, .x$Prediction))
但这会给出错误信息:
Error: Problem with `mutate()` column `MAPE180`.
ℹ `MAPE180 = map_dbl(...)`.
x no applicable method for 'filter' applied to an object of class "list"
如何在传递到波浪线 ~
之前过滤我的 .x
?
根据显示的错误,filter
应用于 list
,但不起作用。相反,对 list
的每个元素执行一次 filter
,而不是两次
library(purrr)
library(dplyr)
map_dbl(TestData, ~ {
tmp <- .x %>%
filter(TENURE == 180) # do filter once
Metrics::mape(tmp %>%
pull(CUMULATIVE_AMOUNT),
tmp %>%
pull(Prediction))
})
此外,这也可以在 summarise
内完成
map_dfr(TestData, ~ .x %>%
filter(TENURE == 180) %>%
summarise(MAPE = Metrics::mape(CUMULATIVE_AMOUNT,
Prediction)))
我在 purrr 和 dplyr 链中有一个片段:
MAPE180 = map_dbl(TestData, ~Metrics::mape(.x %>% filter(TENURE == 180) %>% pull(CUMULATIVE_AMOUNT),
.x %>% filter(TENURE == 180) %>% pull(Prediction)))
这很好用。我想删除 .x %>% filter(TENURE == 180)
的重复项并尝试此操作,希望得到等效项:
MAPE180 = map_dbl(TestData %>% filter(TENURE == 180), ~Metrics::mape(.x$CUMULATIVE_AMOUNT, .x$Prediction))
但这会给出错误信息:
Error: Problem with `mutate()` column `MAPE180`.
ℹ `MAPE180 = map_dbl(...)`.
x no applicable method for 'filter' applied to an object of class "list"
如何在传递到波浪线 ~
之前过滤我的 .x
?
根据显示的错误,filter
应用于 list
,但不起作用。相反,对 list
的每个元素执行一次 filter
,而不是两次
library(purrr)
library(dplyr)
map_dbl(TestData, ~ {
tmp <- .x %>%
filter(TENURE == 180) # do filter once
Metrics::mape(tmp %>%
pull(CUMULATIVE_AMOUNT),
tmp %>%
pull(Prediction))
})
此外,这也可以在 summarise
map_dfr(TestData, ~ .x %>%
filter(TENURE == 180) %>%
summarise(MAPE = Metrics::mape(CUMULATIVE_AMOUNT,
Prediction)))