名稱代表什麼?
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()。
同樣地,你可以用 pryr 的 is_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
哪些陳述是正確的?
is.complex()(參考文件: https://www.rdocumentation.org/packages/base/topics/is.complex)是泛型is的方法,作用於complex物件。seq.Date()(參考文件: https://www.rdocumentation.org/packages/base/topics/seq.Date)是泛型seq的方法,作用於Date物件。is.na.data.frame()(參考文件: https://www.rdocumentation.org/packages/base/topics/is.na)是泛型is.na的方法,作用於data.frame物件。sort()(參考文件: https://www.rdocumentation.org/packages/base/topics/sort)是泛型函式。order()(參考文件: https://www.rdocumentation.org/packages/base/topics/order)是泛型函式。
本練習屬於課程
