2016-04-15 6 views
0

Ich habe eine Tab-separierte Datei wie folgt aus:Konstruieren Sie eine Struktur von textscan Ausgabe in MATLAB

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 

Ich möchte es in Matlab als Struktur wie folgt lesen: enter image description here

I versuchte es so:

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}; 

Allerdings gibt es eine solche Struktur enthält lächerliche Zellen. Alle Nummernfelder verhalten sich anders.HINWEIS: Ich möchte eine 1x17149-Struktur anstelle von 17149x1-Struktur.

Jeder könnte helfen? Vielen Dank.

enter image description here

+0

Konnten Sie Ihr Problem mehr formal beschreiben? – kostek

Antwort

2

Das Problem besteht darin, dass eine Zelle textscan Array von Zahlen liefert für numerische Werte und eine Zellenanordnung von Zellen-Arrays für Zeichen-Arrays. Sie müssen entweder das eine oder das andere so konvertieren, dass sie gleich sind.

Hier ist ein Code, den Sie auf dem Daten funktioniert haben

gezeigt
%// 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{:}]).'; 
Verwandte Themen