Не мудрствуя лукаво создадим два файлика для R и Matlab. Чтобы передавать данные из R, просто представим их в привычном для Matlab виде и "прочитаем".
%%%%%%%% getDataFromRScript.m %%%%%%%%%% % Функция позволяет запускать скрипт R и забирать результат его работы % function [mat,status] = getDataFromRScript(script) [status, output] = system(['Rscript ',script]);% Запустим скрипт R mat = eval(output);% Интерпретируем резульат работы скрипта end
##### SimpleMatlabConnector.R ########## # Функция возвращает вектор в коде матлаба getMatlabVector <- function(vec){ cat('[') for(i in 1:(length(vec)-1)) { cat(vec[i]) cat(",") } cat(vec[length(vec)]) cat(']') } ##### # Функция возвращает матрицу в коде матлаба getMatlabMatrix <- function(mat){ cat('[') for(i in 1:length(mat[,1])) { for(j in 1:length(mat[1,])) { cat(mat[i,j]) if(j!=length(mat[1,])){ cat(",") } } if(i!=length(mat[,1])){ cat(";") } } cat(']') }
Теперь представим, что у нас есть скрипт R из которого нам надо передать данные в Matlab
source('SimpleMatlabConnector.R') v <- 1:100 # Какие-то действия с вектором v # Вернём результат getMatlabVector(v)
В Matlab достаточно запилить что-то подобное
%% % Получим вектор из скрипта R data = getDataFromRScript('example.R'); plot(data)
Это, конечно, не самый лучший способ т.к.
- Rscript должен находиться в Path системы
- нужно следить, чтобы любой другой вывод R-скрипта был подавлен
- годится только для небольших объёмов данных
А что касается передачи из Matlab в R, то всё может работать совершенно аналогично.
Все эти файлы есть у меня на GitHub
Картинка взята отсюда: http://cdn.skilledup.com/wp-content/uploads/2015/01/R-Program-vs-MatLab-Feature_1290x688_MS1-940x501.jpg
Комментариев нет:
Отправить комментарий