Rで解析:MATLABのいくつかのコマンドが使えます「matlab2r」パッケージ

Rの解析に役に立つ記事

MATLABのいくつかのコマンドやMATLABのコマンドをRのコマンドに変換可能なパッケージの紹介です。

vector,matrix,array classの合計を計算、Aに含まれるがBに含まれないAのデータを表示、配列の変形、一様分布の配列を作成などの操作が可能なコマンドが収録されています。

パッケージバージョンは1.3.0。windows11のR version 4.2.2で確認しています。

スポンサーリンク
スポンサーリンク

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("matlab2r")

実行コマンド

詳細はコマンド、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("matlab2r")

#条件がFALSEの時にエラーメッセージ:assertコマンド
#条件を設定:condオプション
#エラーメッセージを指定:msgオプション
#msgにC-styleフォーマットを含む場合:Aオプション
x <- FALSE
assert(cond = (x == TRUE),
       msg = "x is %s",
       A = class(x))

#指定した数の半角空白を作成:blanksコマンド
blanks(n = 10)
#[1] "          "
#例えば
paste0("からだに", blanks(n = 3), "いいもの")
#[1] "からだに   いいもの"

#文字配列を作成:charコマンド
char(matrix(letters, 13))
#, , 1
#    [,1]
#[1,] "a" 
#[2,] "b" 
#[3,] "c" 
#[4,] "d" 
#[5,] "e" 
#[6,] "f" 
#[7,] "g" 
#[8,] "h" 
#[9,] "i" 
#[10,] "j" 
#[11,] "k" 
#[12,] "l" 
#[13,] "m" 

#, , 2
#   [,1]
#[1,] "n" 
#[2,] "o" 
#[3,] "p" 
#[4,] "q" 
#[5,] "r" 
#[6,] "s" 
#[7,] "t" 
#[8,] "u" 
#[9,] "v" 
#[10,] "w" 
#[11,] "x" 
#[12,] "y" 
#[13,] "z" 

#ベクトルを作成:colonコマンド
#開始値:aオプション
#最終値:bオプション
colon(a = 8, b = 12)
[1]  8  9 10 11 12

#catコマンドのラッパー:dispコマンド
TEST <- "からだにいいもの"
disp(TEST)
からだにいいもの
#例えばTestを実行すると
TEST
#[1] "からだにいいもの"

#例えばprintコマンド
print(TEST)
#[1] "からだにいいもの"

#例えばcatコマンド
cat(TEST)
#からだにいいもの

#0ではない数値または指定値の位置を取得:findコマンド
#指定値はオブジェクトに[==]で指定する
#データを指定:xオプション
Test <- data.frame(data_1 = c(1, 0, 2, 0, 1),
                   data_2 = c(3, 1, 0, 0, 4))
find(x = Test)
#[1]  1  3  5  6  7 10
find(x = Test == 3)
#[1] 6

#小数点の切り捨て:fixコマンド
fix(X = c(1.1, 0, 2.9, 3.5))
[1] 1 0 2 3
#truncコマンドと同じ
trunc(x = c(1.1, 0, 2.9, 3.5))
[1] 1 0 2 3

#ガンマ関数の自然対数を計算:gammalnコマンド
gammaln(A = c(1.1, 0, 2.9, 3.5))
[1] -0.04987244 Inf 0.60286961  1.20097360

#文字列の半角空白を1で返す:isspaceコマンド
isspace(A = "からだに いい もの karada good")
[1] 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0

#seqコマンドのラッパー:linspaceコマンド
#開始値:x1オプション
#最終値:x2オプション
#長さ:nオプション
linspace(x1 = -0.5, x2 = 5, n = 5L)
[1] -0.500  0.875  2.250  3.625  5.000
#例seqコマンド
seq(-0.5, 5, length.out = 5)

#MatlabコマンドをRに変換:matlab2rコマンド
#パッケージ収録のMatlabコマンドを読み込む
matlab_script <- system.file("extdata", "matlabDemo.m",
                             package = "matlab2r")
###matlabDemo.mの内容#####
read.table(matlab_script, sep = "\t")
#V1
#1                                                               function y = f(x)
#2  % This is a quick demonstration of MATLAB syntax. Its output is uninteresting.
#3                                                                         z = pi;
#4                                                                     if (z == 0)
#5                                                                         z = 10;
#6                                                                            else
#7                                                                       disp(OK);
#8                                                                             end
#9                                                                    for i = 1:10
#10                                                                    z2 = i - z;
#11                                                                            end
#12                                              y = z + x - (1 * 3 / 9) ^ 2 + z2;

#matlab2rコマンド
#変換方法の指定:outputオプション
#変換後1行ごとコンソール出力;"asis",
#コマンドとしてコンソール出力"clean"
#元ファイルに上書き"save"
#元ファイルと変換コマンドをコンソール出力"diff"
matlab2r(matlab_script, output = "clean")
f <- function(x) {
  #  This is a quick demonstration of MATLAB syntax. Its output is uninteresting.
  z <- pi
  if ((z == 0)) {
    z <- 10
  } else {
    disp('OK')
  }
  for (i in 1:10) {
    z2 <- i - z
  }
  y <- z + x - (1 * 3 / 9) ^ 2 + z2
  return(y)
}
Warning message:
In matlab2r(matlab_script, output = "clean") :
Please pay special attention to parentheses. MATLAB uses them for both argument-passing and object-subsetting. The latter cases should be replaced by squared brackets.

#最大値と位置を取得:maxコマンド
Test <- data.frame(data_1 = c(1, 0, 2, 0, 1),
                   data_2 = c(3, 1, 0, 0, 4))
#データを指定:Xオプション
#位置取得:indicesオプション;TRUE/FALSE
max(X = Test, indices = TRUE)
#$maxs
#data_1 data_2 
#2      4 
#$idx
#[1] 3 5

#最少値と位置を取得:minコマンド
Test <- matrix(c(1, 0, 2, 5, 1, 3))
#データを指定:Xオプション
#位置取得:indicesオプション;TRUE/FALSE
min(X = Test, indices = TRUE)
#$mins
#[1] 0
#$idx
#[1] 2

#数値を文字列に変換:num2strコマンド
#sprintfコマンドのfmtオプションと同じ:formatオプション
num2str(A = c(1.1, 0.0001, 2.9, 3.500),
        format = 5)
[1] "1.1"   "1e-04" "2.9"   "3.5" 

#要素が1のマトリクスを作成:onesコマンド
#行数の指定:n1オプション
#列数の指定:n2オプション
ones(n1 = 5, n2 = 2)
#     [,1] [,2]
#[1,]    1    1
#[2,]    1    1
#[3,]    1    1
#[4,]    1    1
#[5,]    1    1

#要素が0のマトリクスを作成:cellコマンド/zerosコマンド
cell(2, 3)
#     [,1] [,2] [,3]
#[1,]    0    0    0
#[2,]    0    0    0

zeros(2, 3)
#     [,1] [,2] [,3]
#[1,]    0    0    0
#[2,]    0    0    0

#一様分布の配列を作成:randコマンド
#行数の指定:rオプション
#列数の指定:cオプション
rand(r = 3, c = 2)
#           [,1]       [,2]
#[1,] 0.81133714 0.45637136
#[2,] 0.21880174 0.48183421
#[3,] 0.02746946 0.09272841

#指定した配列の繰り返し配列を作成:repmatコマンド
#繰り返し数:nオプション;c(行方向,列方向),もしくは回数
repmat(mx = matrix(1:4, 2),
       n = c(2, 3))
#   [,1] [,2] [,3] [,4] [,5] [,6]
#[1,]    1    3    1    3    1    3
#[2,]    2    4    2    4    2    4
#[3,]    1    3    1    3    1    3
#[4,]    2    4    2    4    2    4

#配列の変形:reshapeコマンド
#変形後の行数を指定:szオプション;c(行数,列数)
reshape(A = matrix(1:4, 2),
        sz = c(1, 4))
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4

#Aに含まれるがBに含まれないAのデータを表示:setdiffコマンド
setdiff(A = data.frame(data_1 = c(1, 0, 2, 9, 1),
                       data_2 = c(3, 1, 11, 0, 4)), 
        B = data.frame(data_1 = c(1, 0, 2, 0, 1),
                       data_2 = c(3, 1, 0, 8, 4)))
# data_1 data_2
#3      2     11
#4      9      0

#データの並び替え:sortrowsコマンド
#並び替えの列を指定:columnオプション
sortrows(A = data.frame(data_1 = c(1, 0, 2, 9, 1),
                        data_2 = c(3, 1, 11, 0, 4)),
         column = 2)
  data_1 data_2
4      9      0
2      0      1
1      1      3
5      1      4
3      2     11

#vector,matrix,array classの合計を計算:sum_MATLABコマンド
#計算方向を指定:dimオプション;列方向:1,行方向:2,全方向:"all"
sum_MATLAB(A = matrix(1:4, 2),
           dim = "all")
[1] 10

#データの掛け算が簡単:timesコマンド
#data.frame class
Test <- data.frame(data_1 = c(1, 0, 2, 9, 1),
                   data_2 = c(3, 1, 11, 0, 4))
#掛ける値を指定:bオプション
times(Test, b = 3)
#     data_1 data_2
#[1,]      3      9
#[2,]      0      3
#[3,]      6     33
#[4,]     27      0
#[5,]      3     12

#matrix class
Test <- matrix(1:4, 2)
times(Test, b = c(3, 0))
#     [,1] [,2]
#[1,]    3    9
#[2,]    0    0

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

タイトルとURLをコピーしました