MATLAB访问结构中的单元阵列

时间:2012-11-29 06:29:10

标签: matlab structure cell octave

假设我有一个名为data的数据集是从dataset(xls2struct('file.xls')创建的:

             subj_CDI: {1166x1 cell}
      age_at_test_CDI: [1166x1 double]
developmental_age_CDI: [1166x1 double]

表达式:

data(data.developmental_age_group_CDI==3, 'subj_CDI') 

将从data.subj_CDI返回单元格。没问题。

但是,如果我尝试通过匹配“HA18”的单元格进行搜索,请使用以下表达式:

data(data.subj_CDI=={'HA18'}, 'developmental_age_group_CDI')

我收到此错误:

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

我知道这是一个数据不匹配,但我无法弄清楚如何解决它...我试图将data.subj_CDI转换为结构,但未成功访问它。 ..

由于

2 个答案:

答案 0 :(得分:2)

您应该使用strcmp代替。它将为您提供您正在寻找的元素(或元素!)的索引。

index = strcmp('HA18',data.subj_CDI);

然后要获取值/值,请使用

data.age_at_test_CDI{index}

答案 1 :(得分:0)

Matlab函数cellfun用于将特定函数应用于单元格中的每个元素。需要花费一些精力才能适应它,但它非常强大。看一下你的例子:

cellfun(@(x)strcmp(x,'HA18),  data.subj_CDI)

返回data.subj_CDI元素的数组,其中strcmp(x, 'HA18')为真(在将每个元素替换为x之后)。 然后你可以使用

data.age_at_test_CDI(cellfun(@(x)strcmp(x,'HA18),  data.subj_CDI))

获得结果。