Predykaty

Funkcyjne programowanie średnio zaawansowane z purrr

Colin Fay

Data Scientist & R Hacker at ThinkR

Czym jest predykat?

Predykaty: zwracają TRUE lub FALSE

  • Testują warunki
  • Dostępne w bazowym R: is.numeric(), %in%, is.character(), itd.

 

is.numeric(10)
TRUE
Funkcyjne programowanie średnio zaawansowane z purrr

Czym jest funkcjonał predykatowy?

Funkcjonały predykatowe:

  • Przyjmują element i predykat
  • Stosują predykat na elemencie

 

keep(airquality, is.numeric)
Funkcyjne programowanie średnio zaawansowane z purrr

every(): czy każdy element spełnia warunek?

# Czy wszystkie elementy visits2016 są numeryczne?
every(visits2016, is.numeric)

# Czy średnia każdego miesiąca przekracza 1000? every(visits2016, ~ mean(.x) > 1000)
TRUE

FALSE

some(): czy niektóre elementy spełniają warunek?

# Czy średnia niektórych miesięcy przekracza 1000? 
some(visits2016, ~ mean(.x) > 1000)
TRUE
Funkcyjne programowanie średnio zaawansowane z purrr

detect_index()

# Który jest pierwszym elementem ze średnią powyżej 1000?
detect_index(visits2016, ~ mean(.x) > 1000)
1
# Który jest ostatnim elementem ze średnią powyżej 1000?
detect_index(visits2016, ~ mean(.x) > 1000, .right = TRUE)
11
Funkcyjne programowanie średnio zaawansowane z purrr

has_element() i detect()

# Jaka jest wartość pierwszego elementu ze średnią powyżej 1000?
detect(visits2016, ~ mean(.x) > 1000, .right = TRUE)
[1] 1289  782 1432 1171 1094 1015  582  946 1191 1393 1307 1125 1267 1345 1066  810  583 
[18] 733  795  766  873  656 1018  645  949  938 1118 1106 1134 1126
# Czy któryś miesiąc ma średnią 981?
visits2016_mean <- map(visits2016, mean)
has_element(visits2016_mean,981)
TRUE
Funkcyjne programowanie średnio zaawansowane z purrr

Czas na ćwiczenia!

Funkcyjne programowanie średnio zaawansowane z purrr

Preparing Video For Download...