2017-10-08 98 views
1

「哪一個4位數字乘以4,自己反轉?」在dplyr :: mutate中使用`map`代替'apply`

這裏就是爲了解決這個相對簡單的數學題

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)) 

第二種方法是這樣的一個嘗試,使用R:

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在最後一步?

回答

3

您可以將最後的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 = "")))