Индексирование имен полей Matlab

Итак, у меня есть массив ячеек с несколькими таблицами, и я пытаюсь получить доступ к имени первого столбца таблицы.

c={'table1', 'table2', 'table3'}

Обе следующие строки дают мне ошибку:

fieldnames(c{1})(1) 
fieldnames(c{1}){1}

Error: ()-indexing must appear last in an index expression.

Но если я делаю следующее, это работает:

fn=fieldnames(c{1})
fn{1}

Есть ли способ сделать это с помощью одной строки кода, и кто-то может объяснить ошибку?

2 ответа

Решение

Смотрите этот вопрос.

Обычно такие проблемы могут быть решены с помощью вызова функции (либо фиктивной функции, которая просто возвращает входные данные), либо вы можете просто заменить fn{} явным вызовом subsref:

subsref(fieldnames(c{1}),substruct('{}',{1}));

Что касается вашего вопроса о том, почему происходит ошибка - может быть, эта ссылка может помочь.

Я предположил, что следующий код воспроизводит вашу структуру данных:

col1 = [1; 2; 3];
col2 = [4; 5; 6];
t1 = table(col1, col2);
t2 = table(col1, col2);
t3 = table(col1, col2);
c = {t1, t2, t3};

Если это так, то это должно работать:

subsref(fieldnames(c{1}),substruct('{}',{1}))
Другие вопросы по тегам