2016-07-01 5 views
2

Я работаю над назначением, где мне нужно прочитать текстовый файл с разделителями табуляции, и мой вывод должен быть структурой matlab.Возможно ли, чтобы поле структуры содержало матрицу?

Содержимое файла выглядит следующим образом (это немного грязно, но вы получаете изображение). Фактический файл содержит 500 генов (строки, начиная с аналит 1) и 204 выборок (столбцы, начиная с А2)

#1.2          
500 204        
Name  Desc  A2 B2 C2 D2 E2 F2 G2 H2 
Analyte 1 Analyte 1 978 903 1060 786 736 649 657 733.5 
Analyte 2 Analyte 2 995 921 995.5 840 864.5 757 739 852 
Analyte 3 Analyte 3 1445.5 1556.5 1579 1147.5 1249 1069.5 1048 1235 
Analyte 4 Analyte 4 1550 1371 1449 1127 1196 1337 1167 1359 
Analyte 5 Analyte 5 2074 1776 1960 1653 1544 1464 1338 1706 
Analyte 6 Analyte 6 2667 2416.5 2601 2257 2258 2144 2173.5 2348 
Analyte 7 Analyte 7 3381.5 3013.5 3353 3099.5 2763 2692 2774 2995 

Мой код выглядит следующим образом:

fid = fopen('gene_expr_500x204.gct', 'r');%Open the given file 

% Skip the first line and determine the number or rows and number of samples 
dims = textscan(fid, '%d', 2, 'HeaderLines', 1); 
ncols = dims{1}(2); 

% Now read the variable names 
varnames = textscan(fid, '%s', 2 + ncols); 
varnames = varnames{1}; 

% Now create the format spec for your data (2 strings and the rest floats) 
spec = ['%s%s', repmat('%f', [1 ncols])]; 

% Read in all of the data using this custom format specifier. The delimiter  will be a tab 
data = textscan(fid, spec, 'Delimiter', '\t'); 

% Place the data into a struct where the variable names are the fieldnames 
ge = data{3:ncols+2} 
S = struct('gn', data{1}, 'gd', data{2}, 'sid', {varnames}); 

часть о ге это мой но это не работает. Любая помощь будет очень оценена, спасибо заранее!

ответ

2

A struct раздел может содержать любой тип данных, включая многомерный массив или матрицу.

Ваша проблема заключается в том, что data{3:ncols+2} создает comma-separated list. Поскольку у вас есть только один выход в левой части задания, ge удерживает только значение последнего значения. Вы должны использовать cat, чтобы объединить все столбцы в большую матрицу.

ge = cat(2, data{3:end}); 

% Or you can do this implicitly with [] 
% ge = [data{3:end}]; 

Затем вы можете передать это значение в struct конструктор

S = struct('gn', data(1), 'gd', data(2), 'sid', {varnames}, 'ge', ge); 
+0

Еще раз спасибо Suever! Он отлично работал. Последующий вопрос, могу ли я теперь использовать эти поля для построения графиков/графиков? – embryo3699

+0

Да, вы можете получить доступ к любому полю с помощью точечной нотации: 'plot (S.ge (:, 1))' и т. Д. – Suever

 Смежные вопросы

  • Нет связанных вопросов^_^