R 配列

配列もR言語のオブジェクトであり、R言語では1次元または多次元の配列を作成できます。

R言語の配列は同じ型のコレクションであり、前に学んだ行列(matrix)は実際には2次元配列です。

ベクトル、行列、配列の関係は次の図を参照してください:

R言語の配列作成には array() 関数を使用します。この関数はベクトルを入力パラメータとして使用し、dim を使用して配列の次元を設定できます。

array() 関数の構文形式は次のとおりです:

array(data = NA, dim = length(data), dimnames = NULL)

パラメータの説明:

  • data- 配列のデータソースを指定します。ベクトル、行列、またはリストを使用できます。
  • dim- 配列の次元を指定します。整数ベクトルまたは次元を表すタプルを指定できます。デフォルトは1次元配列です。例えば、dim = c(2, 3, 4)は、2x3x4の3次元配列を作成することを示します。
  • dimnames- オプションのパラメータで、配列の各次元の名前を指定するために使用します。次元名を含むリストを指定できます。

Rでは、配列のインデックスは1から始まります。他のプログラミング言語の慣習とは異なります。

さらに、Rには配列データを処理するための豊富な関数と演算子が用意されています。インデックス、スライス、再形成、集約などです。

Rでは、次を使用できます行列(Matrix)或リスト(List)を使用して多次元配列を表すことができます。

行列(Matrix):行列はRで最も一般的に使用される配列表現であり、固定の行数と列数を持つ2次元構造です。

次を使用できますmatrix()関数を使用して行列を作成し、データ要素と次元を指定します。

例

# 3x3の行列を作成する
my_matrix <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow = 3, ncol = 3)
print(my_matrix)

リスト(List):リストはRにおけるより汎用的な多次元配列の形式であり、異なる型の要素を含むことができ、各要素は行列、ベクトル、またはその他のデータ構造にすることができます。

例

# 行列とベクトルを含むリストを作成する
my_list <- list(matrix(c(1, 2, 3, 4), nrow = 2), c(5, 6, 7))
print(my_list)

例

# 行列とベクトルを含むリストを作成する
my_list <- list(matrix(c(1, 2, 3, 4), nrow = 2), c(5, 6, 7))
print(my_list)

行列とリストに加えて、Rには多次元配列を表す他のデータ構造も用意されています。配列(Array)やデータフレーム(Data Frame)などです。

例

以下は、array()関数の使用法を示すいくつかの例です:

ベクトルを使用して1次元配列を作成する:

例

my_vector <- c(1, 2, 3, 4)
my_array <- array(my_vector, dim = c(4))
print(my_array)

次の例では、3行3列の2次元配列を作成します:

例

# 長さの異なる2つのベクトルを作成
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)

# 配列を作成
result <- array(c(vector1,vector2),dim = c(3,3,2))
print(result)

上記のコードを実行すると、出力結果は次のようになります:

, , 1

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

, , 2

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

dimnames パラメータを使用して各次元の名前を設定します:

例

# 長さの異なる2つのベクトルを作成
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)
column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2","ROW3")
matrix.names <- c("Matrix1","Matrix2")

# 配列を作成し、各次元の名前を設定
result <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names,column.names,matrix.names))
print(result)

上記のコードを実行すると、出力結果は次のようになります:

, , Matrix1

     COL1 COL2 COL3
ROW1    5   10   13
ROW2    9   11   14
ROW3    3   12   15

, , Matrix2

     COL1 COL2 COL3
ROW1    5   10   13
ROW2    9   11   14
ROW3    3   12   15

配列要素へのアクセス

R言語では、インデックス演算子を使用できます[ ]多次元配列の要素にアクセスできます。

インデックス演算子を使用すると、指定されたインデックス位置にある配列内の特定の要素を取得できます。

配列要素を取得する場合は、要素の列インデックスと行インデックスを座標形式のように使用できます。

単一の要素にアクセス:

例

my_array <- array(1:12, dim = c(2, 3, 2))  # 3次元配列を作成
element <- my_array[1, 2, 1]  # 最初の次元が1、2番目の次元が2、3番目の次元が1の要素にアクセス
print(element)

複数の要素にアクセス:

例

my_array <- array(1:12, dim = c(2, 3, 2))  # 3次元配列を作成
elements <- my_array[c(1, 2), c(2, 3), c(1, 2)]  # 複数の要素にアクセス。各次元のインデックスはそれぞれ1と2です
print(elements)

2次元配列の要素にアクセス:

例

# 長さの異なる2つのベクトルを作成
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)
column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2","ROW3")
matrix.names <- c("Matrix1","Matrix2")

# 配列を作成
result <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names, column.names, matrix.names))

# 配列の2番目の行列の3行目の要素を表示
print(result[3,,2])

# 配列の1番目の行列の1行3列目の要素を表示
print(result[1,3,1])

# 2番目の行列を出力
print(result[,,2])

上記のコードを実行すると、出力結果は次のようになります:

COL1 COL2 COL3 
   3   12   15 
[1] 13
     COL1 COL2 COL3
ROW1    5   10   13
ROW2    9   11   14
ROW3    3   12   15

論理条件を使用したフィルタリング:

例

my_array <- array(1:12, dim = c(2, 3, 2))  # 3次元配列を作成
filtered_elements <- my_array[my_array > 5]  # 5より大きい要素を選択
print(filtered_elements)  # 出力:6 7 8 9 10 11 12

配列要素の操作

配列は複数の次元の行列で構成されているため、行列の要素にアクセスすることで配列要素にアクセスできます。

例

# 長さの異なる2つのベクトルを作成
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)

# 配列を作成
array1 <- array(c(vector1,vector2),dim = c(3,3,2))

# 長さの異なる2つのベクトルを作成
vector3 <- c(9,1,0)
vector4 <- c(6,0,11,3,14,1,2,6,9)
array2 <- array(c(vector3,vector4),dim = c(3,3,2))

# 配列から行列を作成
matrix1 <- array1[,,2]
matrix2 <- array2[,,2]

# 行列の加算
result <- matrix1+matrix2
print(result)

上記のコードを実行すると、出力結果は次のようになります:

     [,1] [,2] [,3]
[1,]    7   19   19
[2,]   15   12   14
[3,]   12   12   26

さらに、次を使用できますapply()要素を使用して配列要素に対して次元をまたいだ計算を実行できます。構文形式は次のとおりです:

apply(X, MARGIN, FUN, ...)

パラメータの説明:

  • X:関数を適用する配列または行列。
  • MARGIN:関数を適用する次元を指定します。1は行、2は列、またはc(1, 2)は行と列の両方に適用することを示します。
  • FUN:適用する関数。組み込み関数(例:mean、sumなど)またはカスタム関数。
  • ...:オプションのパラメータで、関数に渡すその他のパラメータです。

以下では、apply() 関数を使用して、配列内の2つの行列の各行の数値の合計を計算します。

例

# 長さの異なる2つのベクトルを作成
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)

# 配列を作成
new.array <- array(c(vector1,vector2),dim = c(3,3,2))
print(new.array)

# 配列内のすべての行列の1行目の数値の合計を計算
result <- apply(new.array, c(1), sum)
print(result)

上記のコードを実行すると、出力結果は次のようになります:

, , 1

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

, , 2

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

[1] 56 68 60

行列の行または列に組み込み関数を適用する:

例

# 3x3の行列を作成
my_matrix <- matrix(1:9, nrow = 3)
# 各列にsum関数を適用
col_sums <- apply(my_matrix, 2, sum)
print(col_sums)

上記のコードを実行すると、出力結果は次のようになります:

[1]  6 15 24

行列の行または列にカスタム関数を適用する:

例

# 3x3の行列を作成
my_matrix <- matrix(1:9, nrow = 3)
# カスタム関数:各行の平均値を計算
row_mean <- function(x) {
  return(mean(x))
}
# 各行にrow_mean関数を適用
row_means <- apply(my_matrix, 1, row_mean)
print(row_means)

上記のコードを実行すると、出力結果は次のようになります:

[1] 4 5 6

配列の複数の次元に同時に関数を適用する:

例

# 3次元配列を作成
my_array <- array(1:12, dim = c(2, 3, 2))
# 1番目と3番目の次元に同時にmean関数を適用
result <- apply(my_array, c(1, 3), mean)
print(result)

上記のコードを実行すると、出力結果は次のようになります:

     [,1] [,2]
[1,]    3    9
[2,]    4   10
その他の拡張