2014-09-23 3 views
4

에 값을 추가 나는이 구조matlab에 : 초기화 중첩 된 구조체 셀

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. 

해결 방법에 대한 아이디어가 있습니까?

감사합니다. 당신이 struct의 문서를 살펴 경우

답변

3

, 다음과 같은 문장은 말한다 :

s = struct(field,value)가 지정된 필드와 값이 구조 배열을 만듭니다.

  • value 어떤 입력이 빈 셀 어레이는 {} 다음 출력 S가 빈 (0 별 0) 구조 인 경우

    ...

    ...

    . 당신의 필드 {}으로 초기화되기 때문에

, 이들은 빈 셀 어레이는, 당신은 빈 구조를 얻을 것이다, 그래서 당신은 비어로 구조에 액세스 할 수 없습니다. struct을 초기화하려면 [] 대신 빈 괄호를 사용하십시오. 제대로 당신을 위해 구조를 초기화해야

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 

이를, 당신은 그에 따라 필드에 액세스 할 수 있습니다 즉, 당신의 for 루프에서이 작업을 수행. 나는 당신의 셀 어레이 내에서 첫 번째 구조 theta를 초기화하고 싶다면 이와 같이 :

Data.trials{1}.theta = 27; 

이 이제 작동합니다. 다음과 같이 출력을 확인할 수 있습니다.

disp(Data.trials{1}.theta) 

27 
+1

이것은 아름답게 작동합니다. 이것은 전체 인터넷에서 찾은 가장 좋은 답변입니다. 감사합니다. – gaborous

+0

@gaborous oh gee. :). 고마워 ... 그리고 너는 천만 다. – rayryeng