いくつかの解析のために、MatlabファイルをRにインポートしようとしています。 MATLABファイルは、確率値の3D位置配列です。したがって、z "スライス"を横切る2D(x、y)行列です。私がしたいのは、これを "場所"と報告された確率値を持つRファイルに変換することです。だから、出力として以下の線に沿って何か:MatlabからRへの3D配列のインポート
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コード
> 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とが単一の要素であることを示す出力
Tdata <- readMat("file.mat")
head(Tdata)
str(Tdata)
length(Tdata$x)
リストを含む配列は3次元であり、各次元は正しいですし、適切な合計数を持っていますが、これらのリストを切り離したり、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)
助けていただければ幸いです!あなたがTdata$x
またはTdata[[1]]
を持つ配列を取得表示されTdata
オブジェクトに対して
Octaveを仲介者として使用すると、 'foreign :: read.octave'は配列で直接読み取ることができます。 – alistaire
だから私はread.octave( "file.mat")で.MATファイルを読み込むしようと、私はこのエラーを取得する:スイッチで エラー(タイプ、マトリックス= read_octave_matrix(CON)、スカラー= read_octave_scalar(CON)、: EXPRは長さ1のベクトルでなければなりません 次に、ファイル< - readMat( "file.mat")でファイルを読み込み、read.octave(data)で "data"を読み取ってみました。私が間違っているのは何ですか? – Nathan
良い点、それを反映するようにテキストを更新します。ありがとう。 – Nathan