Rで解析:配列(array class)同士の計算が簡単です「dibble」パッケージ


配列(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

少しでも、あなたの解析が楽になりますように!!

スポンサードリンク

スポンサードリンク