変数のタイプとクラス


84

2つのRの質問:

  1. 変数の型(によって返されるtypeof)とクラス(によって返される)の違いは何classですか?違いは、たとえばC ++言語の違いと似ていますか?
  2. 変数の可能なタイプとクラスは何ですか?

この関連記事も有用な情報を提供するかもしれない:stackoverflow.com/questions/8855589/...
ドミニクComtois

回答:


96

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、カスタム動作などによる関数のオーバーロードも可能です。

typeofstorage.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)のリストmodetypeofおよびclass各タイプに関連する方法の例も含まれています。


1
「Rでは、すべての「オブジェクト」には、S4 OOPクラス構造の観点から見た場合に限り、モードとクラスがあります」。S3では、オブジェクトはクラス名を割り当てられていない可能性があります:oldClass(matrix(1:10, 2,5)) # NULL
エルドアンCEVHER

6

type実際には、Rで使用可能なさまざまなデータ構造を指します。R言語定義マニュアルのこの説明 から、オブジェクトと型について始めることができます。

一方、classRでは、予想以外の何かを意味します。R言語の定義(Rのバージョンに付属)マニュアル:

2.2.4クラス

Rには精巧なクラスシステム1があり、主にクラス属性を介して制御されます。この属性は、オブジェクトが継承するクラスのリストを含む文字ベクトルです。これは、Rの「一般的なメソッド」機能の基礎を形成します。

この属性は、ユーザーによる制限なしに仮想的にアクセスおよび操作できます。オブジェクトにクラスメソッドが期待するコンポーネントが実際に含まれていることを確認することはありません。したがって、クラス属性の変更は注意して行う必要があり、それらが使用可能な場合は、特定の作成関数と強制関数を優先する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.