Ich möchte R verwenden, um numerische Daten in einer Tabelle mit nicht eindeutigen Rownames zu einer Ergebnistabelle mit eindeutigen Zeilennamen zusammenzufassen, deren Werte mit einer benutzerdefinierten Funktion zusammengefasst werden. Die Zusammenfassungslogik ist: verwende den Mittelwert von Werten, wenn das Verhältnis des maximalen zu dem minimalen Wert & lt; 1,5, ansonsten Median verwenden. Da die Tabelle sehr groß ist, versuche ich die Funktionen melt () und cast () im reshape2 Paket.
%Vor%Die letzte Zeile des obigen Codes führt zu einer Fehlermeldung.
%Vor%Was mache ich falsch? Beachten Sie, dass, wenn die summarize-Funktion nur min () oder max () zurückgeben soll, kein Fehler auftritt, obwohl eine Warnmeldung über "keine nicht fehlenden Argumente" vorhanden ist. Danke für jeden Vorschlag.
(Die tatsächliche Tabelle, mit der ich arbeiten möchte, ist eine 200x10000-Datei.)
Kurze Antwort: Geben Sie einen Wert für die Füllung wie folgt ein acast (tab.melt, gen ~ variable, summieren, fill = 0)
Lange Antwort: Es scheint, dass Ihre Funktion wie folgt verpackt wird, bevor sie an vapply in der Funktion vaggregate übergeben wird (dcast calls cast, die vaggregate aufruft, die vapply aufruft):
%Vor%Um herauszufinden, was .default sein sollte, wird dieser Code ausgeführt
%Vor%d. .value [0] wird an die Funktion übergeben. min (x) oder max (x) gibt Inf oder -Inf zurück, wenn x numerisch ist (0). Max (x) / min (x) gibt jedoch NaN zurück, das die Klasse logisch hat. Also wenn vapply ausgeführt wird
%Vor%Wenn der Standardwert der Klasse logisch ist (wird von vapply als Vorlage verwendet), schlägt die Funktion fehl, wenn mit der Rückgabe von doubles begonnen wird.
dcast () versucht den Wert der fehlenden Kombination als Standardwert zu setzen.
Sie können dies durch das Argument fill angeben, aber wenn fill = NULL ist, dann wird der Wert, der von fun (0-Längenvektor) zurückgegeben wird (d. h. summarisch (numerisch (0)) hier) als Standard verwendet.
sehen Sie bitte? dcast
Dann ist hier ein Workaround:
%Vor%