将管道运算符 %>%
与 dplyr
、ggvis
、dycharts
等软件包一起使用时,如何有条件地执行某个步骤?例如;
step_1 %>%
step_2 %>%
if(condition)
step_3
这些方法似乎不起作用:
step_1 %>%
step_2
if(condition) %>% step_3
step_1 %>%
step_2 %>%
if(condition) step_3
还有很长的路要走:
if(condition)
{
step_1 %>%
step_2
}else{
step_1 %>%
step_2 %>%
step_3
}
有没有更好的方法而不需要所有冗余?
最佳答案
这是一个利用 .
和 ifelse
的快速示例:
X<-1
Y<-T
X %>% add(1) %>% { ifelse(Y ,add(.,1), . ) }
在ifelse
中,如果Y
为TRUE
则加1,否则只返回X的最后一个值
。 .
是一个替代函数,它告诉函数链上一步的输出去了哪里,因此我可以在两个分支上使用它。
编辑
正如 @BenBolker 指出的,您可能不需要 ifelse
,所以这里有一个 if
版本。
X %>%
add(1) %>%
{if(Y) add(.,1) else .}
感谢 @Frank 指出我应该在 if
和 ifelse
语句周围使用 {
大括号来继续该链。
关于R 使用管道运算符时的条件评估 %>%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30604107/