2012-10-27 45 views
1

我有2所細胞中起作用(起因於某些代碼)如下:如何從細胞數組轉換在MATLAB

p = 
     'GO:0008150' 
     'GO:0016740' 
     'GO:0016787' 
     'GO:0008150' 
     'GO:0016740' 
     'GO:0016740' 
     'GO:0016787' 
     'GO:0016787' 
     'GO:0016787' 
     'GO:0006810' 
     'GO:0006412' 
     'GO:0004672' 
     'GO:0008150' 
     'GO:0008150' 
     'GO:0006810' 
     'GO:0016192' 
     'GO:0006810' 
     'GO:0005215' 

c = 
     'GO:0016740' 
     'GO:0016787' 
     'GO:0006810' 
     'GO:0006412' 
     'GO:0004672' 
     'GO:0016779' 
     'GO:0004386' 
     'GO:0003774' 
     'GO:0016298' 
     'GO:0016192' 
     'GO:0005215' 
     'GO:0030533' 
     'GO:0016787' 
     'GO:0006810' 
     'GO:0006412' 
     'GO:0003774' 
     'GO:0005215' 
     'GO:0030533' 

我有它正常工作與單一數值(numericals或字符)的碼,但它不與上述cellsarrays工作,並出現以下錯誤信息:

??? Undefined function or method 'eq' for input arguments of type 'cell'.

如果有關於如何從轉換任何想法細胞中起作用的任何一種可以接受下面的代碼:

level1_root=setdiff(p,c) % to find the cells from p not in c 
for i=1:length(p) 
    a=[p(i),c(i)]; 
    if a(1,:)==level1_root 
     level=a(2); 
     level=[level a(2)] 
    else 
     end 
end 

回答

5

在你的代碼,a是兩個字符串的單元陣列,而level1_root是一個單元陣列與一個字符串。您無法使用==比較單元格的字符串數組。你應該更喜歡strcmp。例如,像這樣:

level1_root=setdiff(p,c) % to find the cells from p not in c 
    for i=1:length(p) 
     a=[p(i),c(i)]; 
     if strcmp(a{1}, level1_root{:}) 
      level=a(2); 
      level=[level a(2)] 
     else 
     end 
    end 

不過,我不知道,如果上面的代碼會爲你工作,因爲它是。它假設level1_root只有1個元素。示例數組就是這種情況,但可能並不普遍。您將不得不更改代碼以滿足您的需求。

+0

+1:呃,你打我吧:) –

+0

@EitanT對不起,我只是要睡覺;)所以如果這是不正確的答案,請繼續;) – angainor

+0

不,我正要寫出與你一樣的答案。 –