Създаване на имена на променливи с помощта на клетки от масив в Matlab

Опитвам се да напиша скрипт за импортиране на голям .txt файл, съдържащ множество колони с данни, в отделни променливи в Matlab.

Достигнах етап, в който имам своите 7 набора от данни:

Var1= 3230 x 1 double
Var2= 3230 x 1 double
Var3= 3230 x 1 double
Var4= 3230 x 1 double
Var5= 3230 x 1 double
Var6= 3230 x 1 double
Var7= 3230 x 1 double

и масив, съдържащ всички имена на променливи в различни клетки:

nameArray= 1 x 7 cell

Въпросът ми е: как да създам променливи със същите имена като тези в nameArray и впоследствие да ги попълня с данни от моите набори от данни?


person samstevens92    schedule 18.11.2014    source източник
comment
Какво ще кажете за struct с имена на променливи като полета?   -  person Marcin    schedule 18.11.2014
comment
За съжаление се опитвам да напиша универсален скрипт, който да работи всеки път, когато трябва да импортирам данни. Имената на променливите може да се променят при различни импортирания, така че предварителното им дефиниране не е опция, те трябва да се вземат от .txt файла всеки път.   -  person samstevens92    schedule 18.11.2014
comment
@samstevens92 можете динамично да създавате имена на структурни полета - ще бъде по-чисто от динамичното създаване на имена на променливи. Но оставянето им като клетъчна матрица вероятно е най-добрият вариант (т.е. вместо Var1, Var2 и т.н. имайте Var{1}, Var{2}...)   -  person Dan    schedule 18.11.2014


Отговори (2)


Имате три възможности:

  1. Използвайте assignin:

    assignin('caller', nameArray{1}, Var1)
    assignin('caller', nameArray{2}, Var2)
    ...
    

    Това ще създаде променлива с име nameArray{1} и стойност Var1 в пространството от имена на извикващия.

  2. Изградете структура:

    x = struct()
    x.(nameArray{1}) = Var1
    ...
    

    Това изгражда структура с динамично присвоени полета.

  3. Както @Scott предлага в своя отговор: Използвайте readtable:

    T = readTable('mydatafile.txt')
    

    Това дава подобен резултат като опция 2. Но T е от тип table, а не struct. Таблиците са налични във версии на Matlab R2013b и по-нови.

И разбира се, трябва да използвате цикъл

person hitzg    schedule 18.11.2014
comment
Опцията struct е много по-добро решение според мен. - person am304; 18.11.2014
comment
@am304 съгласен съм. Но първият вариант отговаря най-точно на въпроса. - person hitzg; 18.11.2014
comment
Наистина използвах опцията struct с успех. Проучих функцията readtable по-рано, но форматът на .txt файла е доста странен и колоните не се подредиха дистанционно с данните, което доведе до неправилни имена на променливи. Много благодаря на всички за съветите. - person samstevens92; 18.11.2014

Може да обмислите използването на T = readTable('mydatafile.txt'). Това ви позволява да заредите файл с отделни колони и да получите достъп до тези колони, като използвате името на колоната им, например като това: T.MyFirstColumn. Вижте ръководството за readtable за някои примери.

person Scott    schedule 18.11.2014