2つのRの質問:
- 変数の型(によって返される
typeof
)とクラス(によって返される)の違いは何class
ですか?違いは、たとえばC ++言語の違いと似ていますか? - 変数の可能なタイプとクラスは何ですか?
回答:
Rでは、すべての「オブジェクト」にとがmode
ありますclass
。前者はオブジェクトがメモリにどのように格納されるか(数値、文字、リスト、関数)を表し、後者はその抽象型を表します。例えば:
d <- data.frame(V1=c(1,2))
class(d)
# [1] "data.frame"
mode(d)
# [1] "list"
typeof(d)
# list
ご覧のとおり、データフレームはメモリに保存されていますlist
が、data.frame
オブジェクトにラップされています。後者では、メンバー関数の使用だけでなくprint
、カスタム動作などによる関数のオーバーロードも可能です。
typeof
(storage.mode
)は通常、と同じ情報を提供しますmode
が、常にではありません。適例:
typeof(c(1,2))
# [1] "double"
mode(c(1,2))
# [1] "numeric"
R固有の関数typeofは、Rオブジェクトの型を返します。
関数モードは、Becker、Chambers&Wilks(1988)の意味でオブジェクトのモードに関する情報を提供し、S言語の他の実装との互換性が高くなります。
上に投稿したリンクには、すべてのネイティブR basic types
(ベクトル、リストなど)とすべてcompound objects
(factorsとdata.frames)のリストmode
、typeof
およびclass
各タイプに関連する方法の例も含まれています。
oldClass(matrix(1:10, 2,5)) # NULL
type
実際には、Rで使用可能なさまざまなデータ構造を指します。R言語定義マニュアルのこの説明 から、オブジェクトと型について始めることができます。
一方、class
Rでは、予想以外の何かを意味します。R言語の定義(Rのバージョンに付属)マニュアル:
2.2.4クラス
Rには精巧なクラスシステム1があり、主にクラス属性を介して制御されます。この属性は、オブジェクトが継承するクラスのリストを含む文字ベクトルです。これは、Rの「一般的なメソッド」機能の基礎を形成します。
この属性は、ユーザーによる制限なしに仮想的にアクセスおよび操作できます。オブジェクトにクラスメソッドが期待するコンポーネントが実際に含まれていることを確認することはありません。したがって、クラス属性の変更は注意して行う必要があり、それらが使用可能な場合は、特定の作成関数と強制関数を優先する必要があります。