如何通过cellfun获取传递给函数的变量的输入名称?

时间:2013-09-16 05:28:45

标签: matlab function variable-names

我知道自定义函数myfun输出使用inputname命令传递给它的变量名。

但是,当我通过cellfun传递变量时inputname命令停止工作,如下所示(我在传递变量名j的地方lat ,和lon。在这里,它只是以某种方式将所有变量输出为'x'。

>> cellfun(@(x)myfun(x, y), {j, lat, lon}, 'UniformOutput', false)

First calling variable is "x".
First calling variable is "x".
First calling variable is "x".

ans = 
    'x'    'x'    'x'

如果我尝试:

cellfun(@myfun, {j}, 'UniformOutput', false)

我明白了:

First calling variable is "".

ans = 
    {''}

我这样做是因为我正在创建一堆带有函数的图,并且希望所有的图都使用变量的变量名称自动标记,然后我将其传入图中。

1 个答案:

答案 0 :(得分:0)

在此方案中,您丢失了传递的变量名称与inputname之间的连接。我看到的唯一解决方案是将变量的名称作为附加参数发送给myfun。您需要使用单独的函数提取名称,如下所示:

function [values, names] = getNames(varargin)
values = varargin;
names = cell(size(varargin));
for iArg = 1:nargin
    names{iArg} = inputname(iArg);
end
end

然后你的代码应该是这样的

[values, names] = getNames(j,lat,lon);
cellfun(@(x,n)myfun(x,y,n),values,names,'UniformOutput',false);

现在传递给myfun的第三个参数包含其第一个参数的名称。 的更新: 这意味着您需要编辑myfun以接受第三个参数作为变量的名称,而不是使用inputname