0

次のようなタブ区切りのファイルがあります。

refseq  gene    symb    locus_id        chr     strand  start   end     cds_start       cds_end status  chrm
ENST00000456328.2       ENST00000456328.2       DDX11L1 00000456328     chr1    1       11868   14409   14409   14409   Reviewed        1
ENST00000515242.2       ENST00000515242.2       DDX11L1 00000515242     chr1    1       11871   14412   14412   14412   Reviewed        1
ENST00000518655.2       ENST00000518655.2       DDX11L1 00000518655     chr1    1       11873   14409   14409   14409   Reviewed        1
ENST00000450305.2       ENST00000450305.2       DDX11L1 00000450305     chr1    1       12009   13670   13670   13670   Reviewed        1
ENST00000438504.2       ENST00000438504.2       WASH7P  00000438504     chr1    0       14362   29370   29370   29370   Reviewed        1

次のような構造体としてMatlabに読み込みたいと思います: ここに画像の説明を入力

私はこのようにそれをやろうとしました:

fid = fopen('gencode.v19.pseudogene_gistic.txt');
headers = textscan(fid,'%s%s%s%s%s%s%s%s%s%s%s%s',1,'delimiter','\t')
data = textscan(fid,'%s%s%s%d%s%d%d%d%d%d%s%d','delimiter','\t')
fclose(fid);
cdata = struct('refseq',data{1}, 'gene',data{2}, 'symb',data{3}, 'locus_id',data{4}, 'chr',data{5}, 'strand',data{6}, 'start',transpose(data{7}), 'end',data{8}, 'cds_start',data{9}, 'cds_end',data{10}, 'status',data{11}, 'chrn',data{12};

ただし、そのような構造にはばかげたセルが含まれています。すべての数値フィールドの動作は異なります。注: 17149x1 構造体ではなく、1x17149 構造体が必要です。

誰でも助けることができますか?ありがとう。

ここに画像の説明を入力

4

1 に答える 1

2

問題は、textscan数値の数値のセル配列と、文字配列のセル配列のセル配列を返すことです。同じになるように、どちらか一方を変換する必要があります。

これは、表示したデータで機能するコードです

%// Load the headers
headers = textscan(fid,'%s%s%s%s%s%s%s%s%s%s%s%s', 1);

%// Load the data
data = textscan(fid,'%s%s%s%d%s%d%d%d%d%d%s%d');

%// Find which ones aren't nested cell arrays
isarray = ~cellfun(@(x)iscell(x), data);

%// Convert to nested cell arrays
data(isarray) = cellfun(@num2cell, data(isarray), 'uni', 0);

%// Create a structure using the headers as field names
cdata = cell2struct(cat(2, data{:}).', [headers{:}]).';
于 2016-04-15T22:28:21.333 に答える