Matlab:在初始化的嵌套struct-cell中添加值

时间:2014-09-23 15:11:42

标签: matlab structure cells

我有这个结构

Data = struct('trials',{},'time',{},'theta_des',{},'vel_des',{},'trials_number',{},'sample_numbers',{});
Data(1).trials = cell(1,trials_number);
for i=1:trials_number
   Data.trials{i} = struct('theta',{},'pos_err',{},'vel',{},'vel_err',{},'f_uparm',{},'f_forearm',{},'m_uparm',{},'m_forearm',{},...
                           'current',{},'total_current',{},'control_output',{},'feedback',{},'feedforward',{},'kp',{});
end

但是当我想添加一个值

Data.trials{i}.theta = 27;

我收到此错误...

A dot name structure assignment is illegal when the structure is empty.  Use a subscript on the structure.

任何想法如何解决?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果您查看struct的文档,则会出现以下声明:

  

s = struct(field,value)使用指定的字段和值创建结构数组。

     

...

     

...

     
      
  • 如果任何value输入是空单元格数组{},则输出s是空的(0乘0)结构。
  •   

因为您的字段已初始化为{},这些是空单元格数组,您将获得一个空结构,因此您无法访问该结构,因为它是空的。如果您要初始化struct,请使用空大括号[]。换句话说,在for循环中,执行以下操作:

for i=1:trials_number
    Data.trials{i} = struct('theta',[],'pos_err',[],'vel',[],'vel_err',[],'f_uparm',[],'f_forearm' [],'m_uparm',[],'m_forearm',[],...
    'current',[],'total_current',[],'control_output',[],'feedback',[],'feedforward',[],'kp',[]);
end

这应该为您正确初始化结构,然后您可以相应地访问字段。因此,如果我想在单元格数组中的第一个结构中初始化theta

Data.trials{1}.theta = 27;

现在可以使用了。您可以通过以下方式验证输出:

disp(Data.trials{1}.theta)

27