2015-11-29 13 views
14

Rは、同種のオブジェクトのリストを格納するための3つの種類が付属しています。私の知る限りベクトル、行列、および配列データ型の違いは何ですか? <code>vector</code>、<code>matrix</code>と<code>array</code>:

  • vectorは、1次元アレイ
  • matrixための特別な場合である2次元アレイ
  • arrayはまた、(1を含む任意の次元のレベルを有することができるため、特殊なケースであります2)。

ベクトル上の1D配列と行列上の2次元配列の使用の違いは何ですか?それらの間にキャストする必要がありますか、それとも自動的に起こりますか? matrixと2D arrayの間に差がない

答えて

19

> x <- matrix(1:10, 2) 
> y <- array(1:10, c(2, 5)) 
> identical(x, y) 
[1] TRUE 
... 

matrixは単により便利なコンストラクタであり、唯一の2次元アレイ(別名行列)を受け入れる多くの機能と方法があります。

... 
> attributes(x) 
$dim 
[1] 2 5 

> dim(x) <- NULL 
> x 
[1] 1 2 3 4 5 6 7 8 9 10 
> z <- 1:10 
> dim(z) <- c(2, 5) 
> is.matrix(z) 
[1] TRUE 

language definitionを引用する:

は内部的には、アレイは単に寸法属性を有するベクターである

行列と配列単に属性dimと に取り付けられた任意選択dimnamesを有するベクターでありますベクター。

[...]

dim属性は、アレイを実装するために使用されます。 アレイの内容は、列優先順にベクターに格納され、dim 属性は、アレイの各エクステントを指定する整数のベクトルです。 Rは、ベクトルの長さが の次元の長さの積であることを保証します。 1つまたは複数のディメンションの長さが0である可能性があります( )。

ベクトルは、後者の が長さ1のdim属性を持つため、前者はdim 属性を持たないため、1次元配列と同じではありません。

+1

「...内部配列は単なるベクトルです....」 - どのようにクラスの関数はベクトルと1次元配列のために異なる結果を与えるという事実についてはどうですか? –

+0

あなたの質問は何ですか? Rに暗黙のクラスがあります – Roland

+0

@Roland「暗黙のクラスがあります」というこれらの詳細を含めるために答えを編集する必要があります。 'class()'、 'mode()'、 'typeof()'などの関数を使って、ベクトル、配列、行列などの違いを最終的に判断する方法を網羅的に説明すると便利です。 – nbro

関連する問題