web-dev-qa-db-ja.com

変数のタイプとクラス

Rに関する2つの質問:

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

Rでは、すべての「オブジェクト」にはmodeclassがあります。前者はオブジェクトのメモリへの格納方法(数値、文字、リスト、関数)を表し、後者はその抽象型を表します。例えば:

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オブジェクトのタイプを返します

関数modeは、Becker、Chambers&Wilks(1988)の意味でオブジェクトのモードに関する情報を提供し、他の実装とより互換性があります。 S言語

上記のリンクには、すべてのネイティブR basic types(ベクトル、リストなど)およびすべてのcompound objects(factors and data.frames)およびmodetypeof、およびclassが各タイプにどのように関連するかの例。

95
diliop

typeは、実際にRで利用可能なさまざまなデータ構造を指します。 R言語定義マニュアル でのこの議論は、オブジェクトと型を始めるのに役立つかもしれません。

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

2.2.4クラス

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

この属性は、ユーザーによる制限なしに事実上アクセスおよび操作できます。オブジェクトに、クラスメソッドが期待するコンポーネントが実際に含まれているかどうかのチェックはありません。したがって、クラス属性の変更は慎重に行う必要があり、使用可能な場合は、特定の作成および強制機能を優先する必要があります。

6