在dplyr :: mutate中使用`map`而不是`apply`

时间:2017-10-08 10:34:00

标签: r dplyr purrr

“哪个4位数字乘以4会使自己反转?”

这是尝试使用R

来解决这个相对简单的数学问题
library(tidyverse)
library(stringi)

expand.grid(replicate(4, 0:9, simplify = FALSE)) %>%
  filter(Var1 !=0, Var4 !=0) %>%
  transmute(newcol=as.numeric(do.call(paste0,.))) %>%
  filter(newcol<2500) %>% 
  mutate(newcol2=4*newcol) %>% 
  filter(newcol==stri_reverse(newcol2))

第二种方法是:

expand.grid(replicate(4, 0:9, simplify = FALSE)) %>%
  filter(Var1 !=0, Var4 !=0) %>%
  transmute(newcol=as.numeric(do.call(paste0,.))) %>%
  filter(newcol<2500) %>% 
  mutate(newcol2=4*newcol) %>% 
  filter(newcol==apply(.[c("newcol2")],1,function(x) paste0(floor(x/ 10^(0:(nchar(x) - 1))) %% 10,collapse=""))) 

您能告诉我如何在最后一步中使用purrr::map代替apply吗?

1 个答案:

答案 0 :(得分:2)

您可以将上一次filter来电更改为以下内容。

filter(newcol == map(newcol2, ~paste0(floor(./ 10^(0:(nchar(.) - 1))) %% 10, collapse = "")))

或者

filter(newcol == map_chr(newcol2, ~paste0(floor(./ 10^(0:(nchar(.) - 1))) %% 10, collapse = "")))