我正在阅读matlab的bioinformatics工具箱中的集群功能。请参阅cluster.m。
现在我被以下代码的第五行所困扰。
function [clus, nclus, steps]=cluster(tr,v,varargin)
numBranches=size(tr.tree,1);
numLeaves=numBranches+1;
numLabels=numBranches+numLeaves;
[criteria, P, n]=parse_inputs(tr, numLeaves, varargin{:});
这是我的错误
我知道varargin {:}是函数的可变参数个数。
但到底发生了什么? 非常感谢您的时间和关注。
答案 0 :(得分:0)
它是一个本地功能。向下滚动以查看它。
每当您看到一个不熟悉的函数时,请键入which
,然后键入函数名称以检查它是否为Matlab函数;如果是,请输入help
以获取有关如何使用它的更多信息,如果它不是,那么您的提示就是在代码中查找它。
此外,Matlab的内置功能在他们的命名(AFAIK)中不使用下划线,因此,您可以看到的功能不是很重要。来自Mathworks。
来自链接文件:
function [criteria,P,n] = parse_inputs(tr,numLeaves,varargin)
% Parse the varargin parameter/value inputs
% Check that we have the right number of PVP inputs
if rem(numel(varargin),2)~= 0
error('Bioinfo:phytree:cluster:IncorrectNumberOfArguments',...
'Incorrect number of arguments to %s.',mfilename);
end
% The allowed inputs
okargs = {'criterion','distances','maxclust'};
% Set default values
P = squareform(pdist(tr)); % Pairwise distances, stored in square form
% since it will be indexed by row and columns
n = inf; % default maximum number of clusters
criteria = 'm'; % maximum is default criteria
for j=1:2:numel(varargin)-1
[k, pval] = bioinfoprivate.pvpair(varargin{j}, varargin{j+1}, okargs, ['phytree:' mfilename]);
switch(k)
case 1 % 'criterion'
crits = {'maximum','average','median','silhouette','gain','ratio'};
crit = strmatch(lower(pval),crits);
if isempty(crit)
error('Bioinfo:phytree:cluster:NotValidCriterion',...
'Not a valid criterion.')
elseif numel(crit)>1
error('Bioinfo:phytree:cluster:AmbiguousCriterion',...
'Ambiguous criterion.')
else
codes = 'madsgr';
criteria = codes(crit);
end
case 2 % 'distances'
if isnumeric(pval) && isequal(size(pval),[numLeaves,numLeaves]) && all(~diag(pval)) && isequal(pval,pval')
P = pval;
elseif isnumeric(pval) && isvector(pval) && numel(pval)==(numLeaves*(numLeaves-1)/2)
P = squareform(pval);
else
error('Bioinfo:phytree:cluster:InvalidDistances',...
'DISTANCES must be compatible to the output of SEQPDIST, PDIST, or PHYTREE/PDIST.')
end
case 3 % 'maxclust'
if ~isnumeric(pval) || ~isscalar(pval) || rem(pval,1) || pval<1
error('Bioinfo:phytree:cluster:InvalidMaxClust',...
'MAXCLUST must be a positive integer.')
end
n = pval;
end
end