我有一个R公式,它使用magrittr包中的管道运算符%T>%。但是,我无法确切地知道它的作用。谁能告诉我这个配方的作用以及如何在没有管道操作员的情况下编写它。
dataframe %T>% {variable_name <<- .[condition,sum(another variable)]}
这里,条件类似于
size > 100
和另一个变量类似
length
大小和长度都是数据框中的变量。
答案 0 :(得分:1)
%T>%
是&#34; tee&#34;运营商。如magrittr
's vignette中所定义:
%T>%
的作用类似于%>%
,除了它返回左侧值,而不是右侧操作的结果。
换句话说,当您使用T恤操作员时:
T恤可以合并。
结合{..}
,它可用于执行多项操作,例如ggplot2
图表:
library(dplyr)
library(magrittr)
library(ggplot2)
iris %>%
filter(Sepal.Length > 5.2) %T>%
{print(ggplot(data=., aes(x=Petal.Length, y=Petal.Width)) + geom_point())} %>%
head
打印过滤后的iris
上的第一行和会产生ggplot2
作为副作用。后者需要打印才能在这种情况下生产。
你可以看到tee运算符是一种避免死胡同的方法:例如ggplot2
会返回一个gg
/ ggplot
对象,但这可能不是你想要的东西继续管道。通常,您可能希望在管道中的某个点生成图形,然后继续管道。
答案 1 :(得分:0)
假设原始表达式中的dataframe
为data.table
,您要做的是:将dataframe
与condition
进行子集化,计算{{1}的总和在子集中,将总和分配给名为other variable
的全局变量并打印variable_name
的内容。
Vincent Bonhomme已经解释了“tee”运营商的所作所为。也就是说,它使得表达式在这种情况下返回dataframe
的值。我认为这里的混淆是由表达式中的dataframe
引起的。来自.
:
将lhs放置在rhs中的其他位置
通常你会想要lhs到另一个位置的rhs调用 第一。为此,您可以使用点(。)作为占位符。对于 例如,y%&gt;%f(x,。)相当于f(x,y)和z%&gt;%f(x,y,arg) =。)相当于f(x,y,arg = z)。
以下是帖子中表达式的示例:
help("%>%")