Есть ли эквивалент для dput () в R для Matlab? - PullRequest
9 голосов
/ 04 декабря 2011

Есть ли эквивалент dput R () для Matlab?

dput () записывает текстовое представление A-объекта R в файл или соединение.

Ответы [ 2 ]

10 голосов
/ 05 декабря 2011

ОБНОВЛЕНИЕ 1 : добавлена ​​рекурсия и поддержка ячеек!

ОБНОВЛЕНИЕ 2 : Добавлена ​​поддержка структур!

ОБНОВЛЕНИЕ 3 : Добавлена ​​поддержка логики, целых чисел, сложных двойных чисел. Добавлены юнит-тесты. Размещено в FileExchange: http://www.mathworks.com/matlabcentral/fileexchange/34076

ПРИМЕЧАНИЕ : проверьте github на https://github.com/johncolby/dput для всех дальнейших обновлений.


Встроенного эквивалента нет, но шаблон для его создания достаточно прост, поэтому я подумал, что начну его создавать. Просто зациклите переменные и напишите строковый эквивалент в зависимости от типа данных.

Я создал для этого git-репозиторий, так что не стесняйтесь его разветвлять и помогать с разными типами данных. Я опубликую его на FileExchange, когда базовые типы будут готовы (double, char, struct, cell, по крайней мере).

https://github.com/johncolby/dput

Начиная с некоторых примеров переменных

x = 1:10;
y = 3;
z = magic(3);
mystr = ['line1'; 'line2'];
mystruct = mystruct = struct('index', num2cell(1:3), 'color', {'red', 'blue', 'green'}, 'misc', {'string' 4 num2cell(magic(3))})
mycell = {1:3, 'test'; [], 1};

Основное использование:

>> dput(x, y, z, mystr, mystruct, mycell)

ans =

x        = reshape([1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000 ],[1  10])                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ;
y        = reshape([3.000000 ],[1  1])                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ;
z        = reshape([8.000000 3.000000 4.000000 1.000000 5.000000 9.000000 6.000000 7.000000 2.000000 ],[3  3])                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ;
mystr    = reshape('lliinnee12',[2  5])                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ;
mystruct = struct('index',reshape({reshape([1.000000 ],[1  1]) reshape([2.000000 ],[1  1]) reshape([3.000000 ],[1  1]) },[1  3]),'color',reshape({reshape('red',[1  3]) reshape('blue',[1  4]) reshape('green',[1  5]) },[1  3]),'misc',reshape({reshape('string',[1  6]) reshape([4.000000 ],[1  1]) reshape({reshape([8.000000 ],[1  1]) reshape([3.000000 ],[1  1]) reshape([4.000000 ],[1  1]) reshape([1.000000 ],[1  1]) reshape([5.000000 ],[1  1]) reshape([9.000000 ],[1  1]) reshape([6.000000 ],[1  1]) reshape([7.000000 ],[1  1]) reshape([2.000000 ],[1  1]) },[3  3]) },[1  3]));
mycell   = reshape({reshape([1.000000 2.000000 3.000000 ],[1  3]) reshape([ ],[0  0]) reshape('test',[1  4]) reshape([1.000000 ],[1  1]) },[2  2])                                                                                                                                                                                                                                                                                                                                                                                                                                             ;

Затем вы можете просто вставить текст онлайн, чтобы создать воспроизводимый пример, а другие могут скопировать / вставить обратно в MATLAB для регенерации переменных. Так же, как для R!

4 голосов
/ 04 декабря 2011

Вопрос, очевидно, предполагает работающую установку Matlab. Если вы хотите построить примеры в R, используя данные в объектах Matlab, очевидно, что в пакете "R.matlab" есть readMat. Вы можете извлечь данные из файла Matlab (или использовать соединение с сервером) с помощью R, а затем использовать dput или dump.

В пределах только Matlab, по крайней мере, согласно моему прочтению документации, опция, которую я вижу (и она может быть применима только к матрицам Matlab), равна

filename='asc.txt'
save(filename, 'mat', '-ascii')
type asc.txt

Существует также возможность (хотя не совсем в духе ASCII) использования общего формата данных, для которого есть функции Matlab-write и R-read.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...