2017-07-18 116 views
0

我想拼接参数列表以传递给函数。对于矢量我知道我可以使用num2cell并用大括号(请参阅this question)调用单元格,但在我的情况下,我想要拼接的列表最初有struct s,我需要访问它们的一个属性。例如:将函数调用的参数列表转换为参数 - Matlab

austen = struct('ids', ids, 'matrix', matrix); 
% ... more structs defined here 

authors = [austen, dickens, melville, twain]; 

% the function call I want to do is something like 
tmp = num2cell(authors); 
% myFunction defined using varargin 
[a,b] = myFunction(tmp{:}.ids); 

上面的例子不工作,因为预期Matlab的从大括号ONE输出和它的接收如图4所示,一个用于每个作者。我也试图定义我的参数列表作为首位

indexes = {austen.ids, dickens.ids, melville.ids, twain.ids}; 
[a,b] = myFunction(indexes{:}); 

但这个问题是myFunction走的是矢量ids的联合和交集,我得到以下错误的单元阵列:

Error using vertcat 
The following error occurred converting from double to struct: 
Conversion to struct from double is not possible. 

Error in union>unionR2012a (line 192) 
    c = unique([a;b],order); 

Error in union (line 89) 
    [varargout{1:nlhs}] = unionR2012a(varargin{:}); 

这样做的正确方法是什么?问题是我会有数十位作者,我不想通过手动将他们中的任何一个传递给myFunction

+0

能给你更多关于'id和'matrix'的信息,这样你的代码就可以重现吗?另外,由于'authors'是一个结构体,你有没有考虑过使用'struct2cell'而不是'num2cell'? – kedarps

+0

对不起,'ids'是整数的(列)向量,'matrix'是一个实数矩阵。感谢您指点我正确的方向! 'struct2cell'完成任务! – rodrigolece

+0

太棒了,很高兴我能帮到你! – kedarps

回答

0

正如@kedarps正确指出我需要使用struct2cell而不是num2cell。下面的代码的窍门

tmp = struct2cell(authors); 
[a, b] = myFunction(tmp{1,:,:}); %ids is the first entry of the structs 

我从来没有听说过struct2cell!它甚至不显示在help num2cell的另见!有一个apropos函数like Julia's ....