2017-09-08 3 views
2

Gibt es einen Befehl, der zu sauberen Pipelines hinzugefügt wird, der den Fluss nicht unterbricht, aber einige Nebeneffekte erzeugt, wie etwas auszudrucken. Der Anwendungsfall, an den ich denke, ist so etwas. Im Fall einerDrucken von Zwischenergebnissen ohne Unterbrechung der Pipeline in Tidyverse

data %>% 
    mutate(new_var = <some time consuming operation>) %>% 
    mutate(new_var2 = <some other time consuming operation>) %>% 
    ... 

Pipeline würde Ich mag einige Befehle an die Pipeline hinzuzufügen, die das Endergebnis nicht ändern würden, würde aber einige Fortschritte oder den Stand der Dinge ausdrucken. so etwas wie dies vielleicht:

data %>% 
    mutate(new_var = <some time consuming operation>) %>% 
    command_x(print("first operation done")) %>% 
    mutate(new_var2 = <some other time consuming operation>) %>% 
    ... 

Existiert eine solche command_x schon?

+1

Bitte verwenden Sie reproduzierbare Beispiele in Ihre Fragen –

+1

Verwandte https://stackoverflow.com/q/30119628/ Lukes Antwort gibt es die idiomatische Weise schreiben, denke ich. – Frank

+0

Die '% T>%' ist fast, was ich suche, aber es wäre nett, eine Funktion zu haben, die ihr erstes Argument zurückgibt und als ein zweites Argument würde einen Ausdruck auf den ersten Daten nehmen, wie andere dplyr Funktionen tun. Ich glaube, ich habe sowas irgendwo gesehen, könnte aber falsch liegen. –

Antwort

2

Sie könnten leicht eine eigene Funktion

pass_through <- function(data, fun) {fun(data); data} 

schreiben und verwenden Sie es wie

mtcars %>% pass_through(. %>% ncol %>% print) %>% nrow 

Hier verwenden wir die . %>% Syntax eine anonyme Funktion zu erstellen. Sie können auch Ihre eigenen mehr explizit mit

mtcars %>% pass_through(function(x) print(ncol(x))) %>% nrow 
Verwandte Themen