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
少しでも、あなたの解析が楽になりますように!!