谓词

使用 purrr 的函数式编程进阶

Colin Fay

Data Scientist & R Hacker at ThinkR

什么是谓词?

谓词:返回 TRUE 或 FALSE

  • 用于条件判断
  • 基础 R 提供:is.numeric(), %in%, is.character()

 

is.numeric(10)
TRUE
使用 purrr 的函数式编程进阶

什么是谓词函数式?

谓词函数式:

  • 接收一个元素和一个谓词
  • 将谓词应用到该元素

 

keep(airquality, is.numeric)
使用 purrr 的函数式编程进阶

every(): 是否每个元素都满足条件?

# visits2016 的所有元素都是数值吗?
every(visits2016, is.numeric)

# 每个月的均值都大于 1000 吗? every(visits2016, ~ mean(.x) > 1000)
TRUE

FALSE

some(): 是否有部分元素满足条件?

# 是否有些月份的均值大于 1000?
some(visits2016, ~ mean(.x) > 1000)
TRUE
使用 purrr 的函数式编程进阶

detect_index()

# 第一个均值大于 1000 的元素位置?
detect_index(visits2016, ~ mean(.x) > 1000)
1
# 最后一个均值大于 1000 的元素位置?
detect_index(visits2016, ~ mean(.x) > 1000, .right = TRUE)
11
使用 purrr 的函数式编程进阶

has_element() 与 detect()

# 第一个均值大于 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
# 是否有一个月份的均值为 981?
visits2016_mean <- map(visits2016, mean)
has_element(visits2016_mean,981)
TRUE
使用 purrr 的函数式编程进阶

让我们来练习!

使用 purrr 的函数式编程进阶

Preparing Video For Download...