開始使用免費開始

名稱代表什麼?

S3 採用嚴格的命名慣例:所有 S3 方法的名稱都為 generic.class 這種形式。

反過來則未必:函式名稱含有 dot(句點)不代表它就是 S3 方法。許多源自早期 S 語言時代的函式就是這樣。例如,all.equal()(參考文件: https://www.rdocumentation.org/packages/base/topics/all.equal)其實是 S3 泛型,而不是方法。(這也說明了 leopard.case 為什麼容易讓人混淆。)

你可以用 pryr 套件中的 is_s3_generic()(參考文件: https://www.rdocumentation.org/packages/pryr/topics/iss3generic)來檢查某個函式是否為 S3 泛型。你也可以直接把它印出來(在主控台輸入它的名稱),看看它是否呼叫了 UseMethod()

同樣地,你可以用 pryris_s3_method()(參考文件: https://www.rdocumentation.org/packages/pryr/topics/iss3generic)來檢查某個函式是否為 S3 方法。例如,

library(pryr)
is_s3_generic("t")           # generic transpose function
is_s3_method("t.data.frame") # transpose method for data.frames
is_s3_method("t.test")       # a function for Student's t-tests 

哪些陳述是正確的?

  1. is.complex()(參考文件: https://www.rdocumentation.org/packages/base/topics/is.complex)是泛型 is 的方法,作用於 complex 物件。
  2. seq.Date()(參考文件: https://www.rdocumentation.org/packages/base/topics/seq.Date)是泛型 seq 的方法,作用於 Date 物件。
  3. is.na.data.frame()(參考文件: https://www.rdocumentation.org/packages/base/topics/is.na)是泛型 is.na 的方法,作用於 data.frame 物件。
  4. sort()(參考文件: https://www.rdocumentation.org/packages/base/topics/sort)是泛型函式。
  5. order()(參考文件: https://www.rdocumentation.org/packages/base/topics/order)是泛型函式。

本練習屬於課程

在 R 中使用 S3 與 R6 的物件導向程式設計

檢視課程

動手互動練習

將理論付諸實踐,立即體驗我們的互動練習

開始練習