Создание имен переменных с использованием ячеек из массива в 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. Используйте 1_:

    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