Warum wird dieses Funktionshandle im falschen Kontext verwendet?
Ich versuche zu verstehen, wie ich Funktionen an @ weitergevarfun
, das gilt wohl fürarrayfun
, cellfun
etc
eim Lesen der Hilfedatei sollte das erste Argument lauten:
Function, angegeben als Funktionshandle. Sie können die Funktion in einer Datei oder als anonyme Funktion definieren. Wenn func mehreren Funktionsdateien entspricht (d. H., Wenn func eine Reihe überladener Funktionen darstellt), bestimmt MATLAB die aufzurufende Funktion anhand der Klasse der Eingabeargumente.
So versuche ich es mit folgenden Daten:
sampleId = [1 1 1 3 3 3]';
entity = [1 2 3 1 4 5]';
dataTable = table(sampleId, entity)
Und ja
varfun(@mean, dataTable)
ans =
mean_sampleId mean_entity
_____________ ___________
2 2.6667
Jetzt tritt mein Problem auf, wenn ich meine eigene Funktion anonym definiere, zum Beispiel:
mymean = @(x){sum(x)/length(x)};
Dann wird ein Fehler geworfen:
varfun(@mymean, dataTable)
Error: "mymean" was previously used as a variable, conflicting with its use here as the name of a function or command.
See "How MATLAB Recognizes Command Syntax" in the MATLAB documentation for details.
Noch, wenn ich das at-Symbol nicht benutze, erhalte ich:
varfun(mymean, dataTable)
ans =
Fun_sampleId Fun_entity
____________ __________
[2] [2.6667]
Ich habe das Gefühl, dass ich das Funktionshandle verwenden muss@
im falschen Kontext. Kann mich jemand aufklären? (Bemerkung, wie in den Kommentaren vermerkt die Anzeige vonans
ist seltsam, weilmymean
gibt ein Zellenarray zurück. Dies war ein unbeabsichtigter Fehler.