Rに関する2つの質問:
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オブジェクトのタイプを返します
関数modeは、Becker、Chambers&Wilks(1988)の意味でオブジェクトのモードに関する情報を提供し、他の実装とより互換性があります。 S言語
上記のリンクには、すべてのネイティブR basic types
(ベクトル、リストなど)およびすべてのcompound objects
(factors and data.frames)およびmode
、typeof
、およびclass
が各タイプにどのように関連するかの例。
type
は、実際にRで利用可能なさまざまなデータ構造を指します。 R言語定義マニュアル でのこの議論は、オブジェクトと型を始めるのに役立つかもしれません。
一方、class
は、Rで予想外のものを意味します。 R言語定義 マニュアル(Rのバージョンに付属)から:
2.2.4クラス
Rには精巧なクラスシステムがあります1、主にクラス属性を介して制御されます。この属性は、オブジェクトが継承するクラスのリストを含む文字ベクトルです。これは、Rの「ジェネリックメソッド」機能の基礎を形成します。
この属性は、ユーザーによる制限なしに事実上アクセスおよび操作できます。オブジェクトに、クラスメソッドが期待するコンポーネントが実際に含まれているかどうかのチェックはありません。したがって、クラス属性の変更は慎重に行う必要があり、使用可能な場合は、特定の作成および強制機能を優先する必要があります。