Rオブジェクトのモード、クラス、およびタイプ


39

Rオブジェクトのモード、クラス、タイプの違いは何ですか?Rオブジェクトのタイプは、typeof()関数、モード(mode())、およびクラス(class())によって取得できます。

私が見逃した他の同様の機能と概念もありますか?

よろしくお願いします!


2
str(variable)はあなたの親友です。
ブランドンバーテルセン

2
R: Stack Overflowの変数のタイプとクラスの質問も参照してください。
レオ

回答:


21

class()「タイプ」オブジェクトはのためにR.だからで、オブジェクト指向プログラミングの観点からは何であるかを識別/定義するために使用されます

> x <- 1:3
> class(x)
[1] "integer"

「整数」メソッドを持つ汎用関数が使用されます。

typeof()Rの観点からオブジェクトの「タイプ」をmode()与え、Becker、Chambers&Wilks(1988)の観点からオブジェクトの「タイプ」を与えます。後者は、R言語定義マニュアルに従って、他のS実装とより互換性がある場合があります。

typeof()Rオブジェクトをコンパイルされたコードに渡すためではない限り、ほとんどの場合、私はおそらく使用する側で間違いを犯すでしょうstorage.mode()

これは、上記にリンクされているR言語定義で有用に説明されています。


3
なぜそんなに多くの視点があるのですか?混乱以外の利点はありません。
smwikipedia

1
@smwikipediaは、RにはS-PlusとSを含む遺産があり、後者の言語は時間とともに進化したためです。また、ユーザーが作成できるオブジェクトと基本オブジェクトタイプを区別する必要があります。
モニカの復職-G.シンプソン

@smwikipediaは、Rがまさにその方法だからです。同じ理由<-=、変数を割り当てています。
アンドレテラ

9

From:https : //www.mail-archive.com/r-help@r-project.org/msg17169.html

「モード」は、オブジェクトの基本構造による相互排他的な分類です。「アトミック」モードは、数値、複素数、文字、論理です。再帰オブジェクトには、「リスト」や「関数」などのモードがあります。オブジェクトにはモードが1つだけあります。

「クラス」は、オブジェクトに割り当てられたプロパティであり、汎用関数がどのように動作するかを決定します。相互に排他的な分類ではありません。オブジェクトに特定のクラス(単純な数値ベクトルなど)が割り当てられていない場合、そのクラスは通常、慣例によりそのモードと同じです。

オブジェクトのモードの変更は、「強制」と呼ばれることがよくあります。オブジェクトのモードは、必ずしもクラスを変更せずに変更できます。


1

classとtypeofの主な違いは、最初のものはユーザーが定義できるが、タイプは定義できないことです。たとえば、リストを定義する

> x<-list("a",c(1,2))

> # x is a list
> class(x)
[1] "list"
> # class can be user defined
> class(x)<-"newclass"
> class(x)
[1] "newclass"

> typeof(x)
[1] "list"
# you cannot assign a different type using typeof()
> typeof(x)<-"newclass"
Error in typeof(x) <- "newclass" : could not find function "typeof<-" 

ユーザー定義オブジェクトに特定のクラス名を付けることは、プログラムを書くのに非常に便利です。オブジェクト指向プログラミング言語で発生するのと同様の方法で、ユーザー定義オブジェクトにタグを付けることができます。


およびのRドキュメントによると、「主な違い」に関する主張は間違っています。 「typeofはオブジェクトの(R内部)タイプまたはストレージモードを決定します」が、内部ストレージモードに関係なく割り当てることができるオブジェクトの属性です。1つは論理特性を記述し、もう1つはオブジェクトの物理特性を記述します。typeofclassclass
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.