Я пытаюсь импортировать файл Matlab в R для некоторого анализа. Файл Matlab представляет собой трехмерный позиционный массив значений вероятности. Итак, его матрица 2D (x, y) через z "срезы". То, что я хотел бы сделать, это преобразовать это в R-файл с «местоположением», а затем с сообщенной вероятностью. Так что-то вдоль линий ниже как выход:Импорт 3D-массива из Matlab в R
Prob x y z
0.17 1 1 1
0.28 1 1 2
0.35 2 1 1
0.40 2 1 2
0.16 1 2 1
0.27 1 2 2
0.34 2 2 1
0.80 2 2 2
Когда я использую пакет R.matlab я могу импортировать данные, и, как представляется, импорт штраф, но я не могу показаться, чтобы получить " размеры "данных или делить его на разные матрицы ... или действительно делать что-нибудь полезное, но иметь его как длинный« список »значений, который представляет собой длину столбцов * столбцов *.
Ниже несколько примеров кода:
Matlab код
x = rand(3,4,2)
save file.mat x
R Код
Tdata <- readMat("file.mat")
head(Tdata)
str(Tdata)
length(Tdata$x)
Какие выходы
> str(Tdata)
List of 1
$ x: num [1:3, 1:4, 1:2] 0.026 0.330 0.222 0.631 0.567 ...
- attr(*, "header")=List of 3
..$ description: chr "MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Mon Dec 5 17:45:33 2016 "
..$ version : chr "5"
..$ endian : chr "little"
> length(Tdata$x)
[1] 24
Так это показывает, что TDATA является единственным элементом список, содержащий массив с тремя измерениями, и каждое измерение правильное, и оно имеет правильное общее количество значений, но я не могу выделить какой-либо из этих списков или определить их размеры с помощью функций length() или dim(). Первоначально я думал о том, чтобы использовать что-то вроде ниже, но потому, что я не могу получить размеры, которые, похоже, не работают.
ndim <- dim(Tdata)
x_coord <- c(1:ndim[1])
y_coord <- c(1:ndim[2])
z_coord <- c(1:ndim[3])
new_df <- expand.grid(x_coord,y_coord,z_coord)
new_df <- cbind(new_df,Tdata$x)
Любая помощь будет оценена!
Если вы используете Octave в качестве посредника, 'foreign :: read.octave' может читать в массиве напрямую. – alistaire
Итак, я пробовал читать файл .mat в файле read.octave («file.mat»), и я получаю эту ошибку: Ошибка в коммутаторе (тип, matrix = read_octave_matrix (con), scalar = read_octave_scalar (con),: EXPR должен быть длиной 1 вектором Затем я попытался прочитать файл с данными <- readMat ("file.mat"), а затем прочитал эти «данные» с помощью read.octave (data). Затем я попытался преобразовать «данные «для массива и чтения этого с помощью read.octave. Ни один из них не работал. Что я делаю неправильно? – Nathan
Хорошо, я обновлю текст, чтобы это отразить. Спасибо. – Nathan