開始使用免費開始

Primitive 泛型函式

R 的某些核心功能是以 primitive 函式定義的,為了效能,它們使用特殊方式存取 C 程式碼。Primitive 函式的例子包含語言元素(如 iffor)、運算子(如 +$),以及數學函式(如 expsin)。Primitive 函式中也包含 S3 泛型;你可以用 .S3PrimitiveGenerics 取得完整的 S3 primitive 泛型清單(docs)。

當一個 S3 泛型是 primitive 時,R 尋找方法(method)的流程會稍有不同。R 會先如常依據 classdocs)找方法;若沒找到,就會呼叫內部的 C 程式碼函式。(這和一般的泛型不同;一般泛型若找不到方法會拋出錯誤。)這也代表即使你覆寫了物件的類別,像是計算長度這類的基本行為也不會被破壞。

本練習屬於課程

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

檢視課程

練習說明

工作空間中已有一個清單物件,類別被覆寫為 "hairstylist",並指派給變數 hair

  • 使用 str()docs)檢視 hair 的結構。
  • 列出 R 所知道的所有 S3 primitive 泛型。
  • 使用 exists()docs)檢查是否不存在名為 length.hairstylist 的函式。注意這個函式需要字元型別的輸入。
  • 計算變數 hairlength()docs)。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

# View the structure of hair
___

# What primitive generics are available?
___

# Does length.hairstylist exist?
___

# What is the length of hair?
___
編輯並執行程式碼