配列(array class)同士の計算は通常だとエラーが表示されます。配列同士をエラーなく計算できるパッケージの紹介です。
パッケージバージョンは0.1.1。実行コマンドはwindows 11のR version 4.1.3で確認しています。
パッケージのインストール
下記、コマンドを実行してください。
#パッケージのインストール
install.packages("dibble")
実行コマンド
詳細はコメント、パッケージのヘルプを確認してください。
#パッケージの読み込み
library("dibble")
###データ例の作成#####
#配列データ_1
Array_1 <- array(data = 1:8, dim = c(2, 2, 2),
dimname = list(X_1 = letters[1:2],
Y_1 = letters[1:2]))
#Array_1
#, , 1
# Y_1
#X_1 a b
# a 1 3
# b 2 4
#, , 2
#
# Y_1
#X_1 a b
# a 5 7
# b 6 8
#配列データ_2
Array_2 <- array(data = 1:12, dim = c(3, 4),
dimname = list(X_2 = letters[1:3],
Y_2 = letters[1:4]))
#Array_2
# Y_2
#X_2 a b c d
# a 1 4 7 10
# b 2 5 8 11
# c 3 6 9 12
#エラーになる
Array_1[,,1] + Array_2
Error in Array_1 + Array_2 : non-conformable arrays
########
#配列で計算が可能なdibble classへ変換:as_dibbleコマンド
TestDibble_1 <- as_dibble(Array_1[,,1])
TestDibble_2 <- as_dibble(Array_2)
##dibble形式の内容
TestDibble_1
# A dibble: 4
# Dimensions: X_1 [2], Y_1 [2]
# X_1 Y_1 .
# <chr> <chr> <int>
# 1 a a 1
# 2 a b 3
# 3 b a 2
# 4 b b 4
##計算を実行すると値が返されるが
##BroadcastingのWarning messagesも出力される
TestDibble_1 + TestDibble_2
# A dibble: 48
# Dimensions: X_1 [2], Y_1 [2], X_2 [3], Y_2 [4]
# X_1 Y_1 X_2 Y_2 .
# <chr> <chr> <chr> <chr> <int>
# 1 a a a a 2
# 2 a a a b 5
# 3 a a a c 8
# 4 a a a d 11
# 5 a a b a 3
# 6 a a b b 6
# 7 a a b c 9
# 8 a a b d 12
# 9 a a c a 4
#10 a a c b 7
# ... with 38 more rows
# Warning messages:
# 1: Broadcasting,
#$ X_1: chr [1:2] "a" "b"
#$ Y_1: chr [1:2] "a" "b"
#$ X_2: chr [1:3] "a" "b" "c"
#$ Y_2: chr [1:4] "a" "b" "c" "d"
# 2: Broadcasting,
#$ X_1: chr [1:2] "a" "b"
#$ Y_1: chr [1:2] "a" "b"
#$ X_2: chr [1:3] "a" "b" "c"
#$ Y_2: chr [1:4] "a" "b" "c" "d"
#BroadcastingのWarning messagesを抑制:broadcastコマンド
#dim_namesの設定が必要です
broadcast(TestDibble_1 + TestDibble_2,
dim_names = c(names(dimnames(TestDibble_1)),
names(dimnames(TestDibble_2))))
# A dibble: 48
# Dimensions: X_1 [2], Y_1 [2], X_2 [3], Y_2 [4]
# X_1 Y_1 X_2 Y_2 .
# <chr> <chr> <chr> <chr> <int>
# 1 a a a a 2
# 2 a a a b 5
# 3 a a a c 8
# 4 a a a d 11
# 5 a a b a 3
# 6 a a b b 6
# 7 a a b c 9
# 8 a a b d 12
# 9 a a c a 4
#10 a a c b 7
# ... with 38 more rows
少しでも、あなたの解析が楽になりますように!!