magrittr %>% 管道是如何工作的?
How do magrittr %>% pipes work exactly?
所以我这辈子都无法理解这个极其简单的概念。
这段代码在我看来就像来自地狱的代码。有人告诉我这些管道就像俄罗斯套娃。管道之前的每个语句显然都进入管道之后的语句。这就是我被告知的。所以我不明白的是,首先,这怎么能无休止地继续链接,其次,管道如何知道前一条语句在下一条语句中的位置??
举个例子... read.csv2 ... %>% select(-x..otu)
它从那里一直在继续......它如何知道将前一个语句或函数放在下一个语句中的什么位置?
默认是放在第一个参数中。但是,您可以使用 .
来覆盖此默认值。当您需要将一个函数的输出提供给另一个函数的输入而不创建会填充您的全局环境的中间变量时,管道非常有用。在您的示例代码中,在 ggplot 输出绘图之前没有创建中间变量。如果没有%>%
,唯一不创建中间变量,同时有复杂操作的方法是嵌套所有函数,这会更加混乱...
例如(编):
df %>%
group_by(id) %>%
summarize(n()) %>%
inner_join(df) %>%
mutate(revenue = price*quantity)
将转换为:
mutate(inner_join(summarize(group_by(df, id), n()), df), revenue = price*quantity)
这不是特别吸引眼球...
所以我这辈子都无法理解这个极其简单的概念。
这段代码在我看来就像来自地狱的代码。有人告诉我这些管道就像俄罗斯套娃。管道之前的每个语句显然都进入管道之后的语句。这就是我被告知的。所以我不明白的是,首先,这怎么能无休止地继续链接,其次,管道如何知道前一条语句在下一条语句中的位置??
举个例子... read.csv2 ... %>% select(-x..otu)
它从那里一直在继续......它如何知道将前一个语句或函数放在下一个语句中的什么位置?
默认是放在第一个参数中。但是,您可以使用 .
来覆盖此默认值。当您需要将一个函数的输出提供给另一个函数的输入而不创建会填充您的全局环境的中间变量时,管道非常有用。在您的示例代码中,在 ggplot 输出绘图之前没有创建中间变量。如果没有%>%
,唯一不创建中间变量,同时有复杂操作的方法是嵌套所有函数,这会更加混乱...
例如(编):
df %>%
group_by(id) %>%
summarize(n()) %>%
inner_join(df) %>%
mutate(revenue = price*quantity)
将转换为:
mutate(inner_join(summarize(group_by(df, id), n()), df), revenue = price*quantity)
这不是特别吸引眼球...