data.table ': =' Zuweisungsausdrücke mit dynamischen Eingaben (vorhandenen Spalten) und Ausgaben (neue Spaltennamen)

8
  

Hinweis : Das genaue Problem, das ich in dieser Frage treffe, trifft nicht auf neuere Versionen der Datentabelle zu. Wenn Sie etwas tun möchten, wie es im Titel beschrieben ist, lesen Sie die entsprechende Frage in der FAQ des Pakets, 1.6 OK, aber ich kenne die Ausdrücke nicht voraus. Wie übermittle ich sie programmatisch? .

Ich habe eine Antwort gesehen, die veranschaulicht, wie ein Ausdruck erstellt wird, der in

ausgewertet werden soll %Vor%

Ich verwende dies mit einer Zuweisung, '' ': =' (mycol = meine_Berechnung) '' und ich frage mich ...

  • Wie kann ich den Namen "mycol" dynamisch vergeben?
  • Was ist der richtige Weg, um "my_calculation" dynamisch bestimmte Spalten zu setzen?

Mit "dynamisch" meine ich "bestimmt, nachdem ich den Code für mein expr geschrieben habe".

Neues Beispiel

BEARBEITEN: Um das Problem besser zu veranschaulichen, hier ein anderes Beispiel. Suchen Sie im Bearbeitungsverlauf nach dem Original.

%Vor%

Ich möchte die Setup- und Nutzungsschritte getrennt halten , damit mein Code leichter zu pflegen ist. Mein wirklicher Ausdruck ist unordentlicher als dieses Beispiel (wo es nur eine Spalte auswählt).

Fragen

  

Erste Frage : Wie kann ich die zugewiesene Spalte "col_out" dynamisch machen? Ich meine: Ich möchte sowohl "cols_in_ *" als auch "col_out" im laufenden Betrieb angeben.

Ich habe versucht, verschiedene Ausdrücke in "expr" zu erstellen, aber as.quoted gibt einen Fehler aus, wenn man bestimmte Dinge nicht links vom = Symbol platziert.

  

Zweite Frage : Wie kann ich die Warnungen gegen die Verwendung von get vermeiden?

Die Warnungen schlagen vor, .SDcols zu verwenden, damit [.data.table weiß, welche Spalten ich verwende. Wenn ich jedoch das Argument .SDcols verwende, gibt eine andere Warnung an, dass es keinen Sinn macht, das zu tun, es sei denn .SD wird verwendet.

Vorläufige Lösung

Die Lösungen, die ich bisher habe, sind ...

%Vor%

Das bringt immer noch den kleinen Ärger mit sich, die Operation in zwei Schritten durchzuführen und "Vtmp" im Auge zu behalten, also ist die erste Frage noch teilweise offen.

    
Frank 09.10.2013, 15:25
quelle

2 Antworten

8

Vielleicht verstehe ich das Problem nicht gut, aber reicht das aus:

%Vor%

Um die bearbeitete Frage zu beantworten, verwenden Sie eval als Umgebung:

, damit .SD funktioniert %Vor%

Siehe auch diese Frage und das Update dort - eval und quote in data.table

    
eddi 09.10.2013, 15:52
quelle
5

Der einfachste Weg besteht darin, sie NACH der Auswertung des Ausdrucks einzustellen. Afterall, die Zeit, um das auszuführen, ist konstant und fast 0.

%Vor%

Wie bei Frage zwei: Aktivieren Sie keine ausführlichen Warnungen und Sie erhalten keine ausführlichen Warnungen;)

%Vor%

Wie bei Reduce : Versuchen Sie, das als separate und vereinfachte Frage zu veröffentlichen, damit Sie leichter verfolgen können, was Sie tun (außerhalb der eval issues)

    
Ricardo Saporta 09.10.2013 15:39
quelle

Tags und Links