<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe im Handbuch (Scripting Guide, Kapitel 11) gelesen, wo es über "Verschachtelung und Präzedenzierung" erklärt, und mich gefragt hat, ob andere eine Option haben möchten, die eher wie ein Pipelineoperator wirkt (ähnlich wie%>% Magrittr Betreiber in R). Anstatt Ihre gestapelten Nachrichten mit Klammern wie zu verschachteln
((Objekt << Nachricht1) << Nachricht2) << Nachricht3
Es wäre besser lesbar und fließt von links nach rechts
Objekt% >>% Nachricht1
% >>% message2
% >>% message3
Sie könnten das tun. Es ist möglicherweise nicht der beste Ansatz für zukünftige Wartungsarbeiten. Eine gut benannte Variable kann viel verdeutlichen.
dt = open ("C: \ Programme \ SAS \ JMPPRO \ 13 \ Samples \ Import Data \ bigclass_L.txt")
<< selectwhere (13 <=: age <= 15) << invertRowSelection << Deleterows
<< neue Spalte ("Halbwert", Formel (Alter / 2))
<< selectwhere (row () <= 10) << invertRowSelection << deleterows;
Sie können die invertRowSelection-Funktion deaktivieren, indem Sie die selectWhere-Bedingung ändern.
Dies funktioniert, weil ich Nachrichten ausgewählt habe, die kein neues Objekt erstellen (wie << Teilmenge). Wenn << subset verwendet wird, sind zusätzliche Parens erforderlich, damit nachfolgende Nachrichten an das neue Objekt weitergeleitet werden. Die Verwendung von Teilmengen ist möglicherweise schneller als die Verwendung von delete.
Sechs Monate später möchte ich lieber etwas weniger monolithisches beibehalten:
allData = Open ("C: \ Programme \ SAS \ JMPPRO \ 13 \ Samples \ Import Data \ bigclass_L.txt");
ageSubset = allData << selectwhere (13 <=: age <= 15) << Teilmenge (ausgewählte Zeilen (1));
tenRows = ageSubset << selectwhere (Row () <= 10) << Teilmenge (ausgewählte Zeilen (1));
tenRows << New Column ("Halfage", Formel (Alter / 2));
Schließen (allData, nosave);
Schließen (ageSubset, nosave);
motivieren... Ich fragte mich, wie andere dieses R / magrittr-Beispiel in JSL schreiben würden, wo sie erklären:
Four operations are performed to arrive at the desired data set, and they are written in a natural order: the same as the order of execution. Also, no temporary variables are needed. If yet another operation is required, it is straight-forward to add to the sequence of operations wherever it may be needed.
the_data <-
read.csv ('/ pfad / zu / data / file.csv')%>%
Teilmenge (Variable_a> x)%>%
transform (variable_c = variable_a / variable_b)%>%
Kopf (100)