0

次のように、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
4

1 に答える 1

5

コードでaは、 は 2 つの文字列のセル配列ですが、 はlevel1_root1 つの文字列のセル配列です。を使用して文字列のセル配列を比較することはできません==。あなたはむしろするべき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 つしかないことを前提としています。これは配列の例の場合ですが、一般的にはそうではないかもしれません。必要に応じてコードを変更する必要があります。

于 2012-10-27T21:26:56.763 に答える