Programmation fonctionnelle intermédiaire avec purrr
Colin Fay
Data Scientist & R Hacker at ThinkR
Une fonction d'ordre supérieur peut :
nop_na <- function(fun){ function(...){ fun(..., na.rm = TRUE) } }sd_no_na <- nop_na(sd) sd_no_na( c(NA, 1, 2, NA) )
0.7071068
Fonctionnelles
Fabriques de fonctions
Opérateurs de fonctions
Gérer les erreurs et avertissements :
possibly()safely()library(purrr)
safe_mean <- safely(mean)
class(safe_mean)
"function"
safely() retourne une fonction qui renverra :
$result $errorsafe_log <- safely(log)
safe_log("a")
$result
NULL
$error
<simpleError in log(x = x, base = base): non-numeric argument to mathematical function>
map( list(2, "a"), log )
Error in log(x = x, base = base) : non-numeric argument to mathematical function
map( list(2, "a"), safely(log) )
[[1]]
[[1]]$result
[1] 0.6931472
[[1]]$error
NULL
[[2]]
[[2]]$result
NULL
[[2]]$error
<simpleError in log(x = x, base = base):non-numeric argument to mathematical function>
map() et "result" ou "error"
safe_log <- safely(log)
map( list("a", 2), safe_log) %>%
map("result")
[[1]]
NULL
[[2]]
[1] 0.6931472
safe_log <- safely(log)
map( list("a", 2), safe_log ) %>%
map("error")
[[1]]
<simpleError in log(x = x,
base = base): non-numeric argument
to mathematical function>
[[2]]
NULL
Programmation fonctionnelle intermédiaire avec purrr