如何在matlab中转换单元格数组

时间:2012-10-27 20:47:56

标签: arrays matlab cells

我有2个单元格函数(由某些代码生成),如下所示:

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'

我有一个代码,它可以正常使用单个值(数字或字符),但它不适用于上面的单元格,并出现以下错误消息:

  

??? 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

1 个答案:

答案 0 :(得分: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个元素。这是示例数组中的情况,但可能不是一般的。您必须更改代码以满足您的需求。