基本使用和連結

管道運算子%>%用於將引數插入到函式中。它不是該語言的基本功能,只能在附加提供它的包之後使用,例如 magrittr。管道運算子采用管道的左側(LHS)並將其用作管道右側(RHS)上的功能的第一個引數。例如:

library(magrittr)

1:10 %>% mean
# [1] 5.5

# is equivalent to
mean(1:10)
# [1] 5.5

管道可用於替換一系列函式呼叫。多個管道允許我們從左到右讀取和寫入序列,而不是從內到外讀取和寫入序列。例如,假設我們將 years 定義為一個因子,但希望將其轉換為數字。為防止可能的資訊丟失,我們首先轉換為字元,然後轉換為數字:

years <- factor(2008:2012)

# nesting
as.numeric(as.character(years))

# piping
years %>% as.character %>% as.numeric

如果我們不希望 LHS(左手側)用作 RHS(右手側) 的第一個引數,則有一些解決方法,例如命名引數或使用 . 來指示管道輸入的位置。

# example with grepl
# its syntax:
# grepl(pattern, x, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE)

# note that the `substring` result is the *2nd* argument of grepl
grepl("Wo", substring("Hello World", 7, 11))

# piping while naming other arguments
"Hello World" %>% substring(7, 11) %>% grepl(pattern = "Wo")

# piping with .
"Hello World" %>% substring(7, 11) %>% grepl("Wo", .)

# piping with . and curly braces
"Hello World" %>% substring(7, 11) %>% { c(paste('Hi', .)) }
#[1] "Hi World"

#using LHS multiple times in argument with curly braces and .
"Hello World" %>% substring(7, 11) %>% { c(paste(. ,'Hi', .)) }
#[1] "World Hi World"