述詞

使用 purrr 的 R 語言中級函式程式設計

Colin Fay

Data Scientist & R Hacker at ThinkR

什麼是述詞?

述詞:回傳 TRUE 或 FALSE

  • 測試條件
  • 基本 R 內建:is.numeric(), %in%, is.character()

 

is.numeric(10)
TRUE
使用 purrr 的 R 語言中級函式程式設計

什麼是述詞函式式?

述詞函式式:

  • 接受一個元素與一個述詞
  • 對元素套用述詞

 

keep(airquality, is.numeric)
使用 purrr 的 R 語言中級函式程式設計

every(): 是否「每個」元素都符合條件?

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

# 每個月份的平均都大於 1000 嗎? every(visits2016, ~ mean(.x) > 1000)
TRUE

FALSE

some(): 是否「有些」元素符合條件?

# 有些月份的平均大於 1000 嗎? 
some(visits2016, ~ mean(.x) > 1000)
TRUE
使用 purrr 的 R 語言中級函式程式設計

detect_index()

# 第一個平均超過 1000 的元素是第幾個?
detect_index(visits2016, ~ mean(.x) > 1000)
1
# 最後一個平均超過 1000 的元素是第幾個?
detect_index(visits2016, ~ mean(.x) > 1000, .right = TRUE)
11
使用 purrr 的 R 語言中級函式程式設計

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 的 R 語言中級函式程式設計

一起來練習吧!

使用 purrr 的 R 語言中級函式程式設計

Preparing Video For Download...