23  magrittr-Pipe (“%>%”)

Eine Alternative zum base-Pipe-Operator (“|>”), den wir im R Crash Course kennengelert haben, ist der am meisten verbreitete magrittr-Pipe-Operator (“%>%”) aus dem Paket “magrittr”. Der magrittr-Pipe funktioniert sehr ähnlich wie der base-Pipe:

library(magrittr)
x <- 5.678

# base-Pipe 
x |>  round(2)
[1] 5.68
# magrittr-Pipe
x %>% round(2)
[1] 5.68

Es gibt allerdings auch einige Unterschiede. Die Wichtigsten sind:

  1. Verfügbarkeit
  1. Funktionsaufruf
1:5 |> sum()
1:5 |> sum   # hier bekommen wir eine Fehlermeldung

1:5 %>% sum  # hier nicht 
Error in sum: The pipe operator requires a function call as RHS (<input>:2:8)

Entsprechend kann der Code-chunk aus dem vorherigen Beispiel mit dem magrittr-Pipe alternativ auch so aussehen:

result <- c(1, 2, 3, 4, 5) %>%   
      append(c(6,7,8)) %>%      
      sum %>%                 
      sqrt                   
          
print(result)
[1] 6
  1. Platzhalter:
x <- 3

# base-Pipe 
x |> round(3.4567, digits = _) # "_" als Platzhalter & Argument "digits" muss genannt werden
[1] 3.457
# magrittr-Pipe
x %>% round(3.4567, .) # "." als Platzhalter & Argument muss nicht genannt werden
[1] 3.457

Wir schauen uns ein weiteres komplexeres Beispiel an, um den Unterschied zwischen den Platzhaltern zu veranschaulichen:

data <- data.frame(var1 = c(1, 2, 3, 4, 5),
                   var2 = c(10, 9, 8, 7, 10),
                   var3 = c(11, 12, 16, 14, 17))

data %>% .$var1 %>% cor(., data$var2) # dies funktioniert

data |>  _$var1 |>  cor(_, data$var2) # dies funktioniert nicht, weil der Platzhalter
# "_" nur als Argument verwendet werden darf und wir bekommen eine Fehlermeldung
Error in cor("_", data$var2): pipe placeholder can only be used as a named argument (<input>:7:21)