说我要创建一个从M-文件的函数,返回两个输出一个匿名函数。 是否有可能建立匿名函数,它只返回从m文件函数的第二个输出?
例如: ttest2
返回两个输出,T / F和概率。 如果我想使用t检验cellfun
,我可能只兴趣收集的概率,也就是我想写这样的事情
probabilities = cellfun(@(u,v)ttest2(u,v)%take only second output%,cellArray1,cellArray2)
说我要创建一个从M-文件的函数,返回两个输出一个匿名函数。 是否有可能建立匿名函数,它只返回从m文件函数的第二个输出?
例如: ttest2
返回两个输出,T / F和概率。 如果我想使用t检验cellfun
,我可能只兴趣收集的概率,也就是我想写这样的事情
probabilities = cellfun(@(u,v)ttest2(u,v)%take only second output%,cellArray1,cellArray2)
有没有办法,我的表达中知道的匿名函数把它选择从多个可能的输出参数的函数返回的输出。 但是,当你评估匿名函数就可以返回多个输出。 下面是一个使用该函数的一个例子MAX :
>> data = [1 3 2 5 4]; %# Sample data
>> fcn = @(x) max(x); %# An anonymous function with multiple possible outputs
>> [maxValue,maxIndex] = fcn(data) %# Get two outputs when evaluating fcn
maxValue =
5 %# The maximum value (output 1 from max)
maxIndex =
4 %# The index of the maximum value (output 2 from max)
此外,为了处理您在上面给出的具体例子中,最好的办法是实际上只是使用功能手柄 @ttest2
作为输入到CELLFUN ,然后从获得多个输出CELLFUN本身:
[junk,probabilities] = cellfun(@ttest2,cellArray1,cellArray2);
在MATLAB的新版本,你可以替换变量junk
用~
忽略第一个输出参数。
要做到这一点的一种方法是定义函数:
function varargout = getOutput(func,outputNo,varargin)
varargout = cell(max(outputNo),1);
[varargout{:}] = func(varargin{:});
varargout = varargout(outputNo);
end
然后getOutput(@ttest2,2,u,v)
仅给出p-value
。
要在使用它cellfun
你需要运行:
probabilities = cellfun(@(u,v)getOutput(@ttest2,2,u,v)...
这样就不需要每次都写一个包装,但你必须确保此功能始终在路径。