我对purrr贴图功能有疑问。
我想在小标题中的两个嵌套列表列上应用数学函数。我想将列转换为数值向量以执行我的计算。
但是我一直收到错误消息: mutate_impl(.data,点)中的错误: 评估错误:数学函数的非数字参数。
我尝试使用purrr :: map2应用自定义函数,但会引发错误。请问能达到目的吗?请参见下面。
mape <- function(actual,pred){
mape <- mean(abs(ifelse(actual==0,
ifelse(pred==0,0,abs(1 - pred)*100),((actual - pred)/actual*100))))
return (mape)
}
mape_score <- mape_lab %>% mutate(mape_score=map2(data[],pred_lab[],mape))
> mape_lab
# A tibble: 30 x 3
Location pred_lab data
<fct> <list> <list>
1 Balsthal <dbl [12]> <tibble [12 x 1]>
2 Balsthal <dbl [12]> <tibble [12 x 1]>
3 Balsthal <dbl [12]> <tibble [12 x 1]>
4 Bettlach <dbl [12]> <tibble [12 x 1]>
5 Bettlach <dbl [12]> <tibble [12 x 1]>
6 Bettlach <dbl [12]> <tibble [12 x 1]>
7 Oberdorf Bio <dbl [12]> <tibble [12 x 1]>
8 Oberdorf Bio <dbl [12]> <tibble [12 x 1]>
9 Oberdorf Bio <dbl [12]> <tibble [12 x 1]>
10 Grenchen <dbl [12]> <tibble [12 x 1]>
预期结果:
> mape_lab
# A tibble: 30 x 3
Location pred_lab data mape_score
<fct> <list> <list> <num>
1 Balsthal <dbl [12]> <tibble [12 x 1]> 1244
2 Balsthal <dbl [12]> <tibble [12 x 1]> 32545
3 Balsthal <dbl [12]> <tibble [12 x 1]> 54554
4 Bettlach <dbl [12]> <tibble [12 x 1]> .....
5 Bettlach <dbl [12]> <tibble [12 x 1]>
6 Bettlach <dbl [12]> <tibble [12 x 1]>
7 Oberdorf Bio <dbl [12]> <tibble [12 x 1]>
8 Oberdorf Bio <dbl [12]> <tibble [12 x 1]>
9 Oberdorf Bio <dbl [12]> <tibble [12 x 1]>
10 Grenchen <dbl [12]> <tibble [12 x 1]>
答案 0 :(得分:0)
在提问时,请添加一个reproducible example。
就您的问题而言,主要问题是data
是tibble
,而pred_lab
是数字向量。您可以flatten
data
,因为它只有一列,然后应用mape
。
library(tidyverse)
mape_lab %>% mutate(mape_score = map2_dbl(data %>% flatten, pred_lab, mape))