我知道自定义函数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 =
{''}
我这样做是因为我正在创建一堆带有函数的图,并且希望所有的图都使用变量的变量名称自动标记,然后我将其传入图中。
答案 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
。