如何将 tidyr/dplyr/tidyverse %>% 命令继续到下一行?

How to continue tidyr/dplyr/tidyverse %>% commands to the next line?

我有一个很长的命令,里面有一长串 dplyr/tidyr 命令:

Object %>% mutate() %>% select() %>% separate() %>% separate() %>% separate %>% separate() %>% separate() %>% select()

为了便于阅读,我想将它分成多行,有没有办法做到这一点?

您可以将每个命令放在单独的行中,只要它以管道结尾,%>%

Object %>% 
  mutate() %>% 
  select() %>% 
  separate() %>% 
  separate() %>% 
  separate() %>% 
  separate() %>% 
  separate() %>% 
  select()

R 通常会继续读取更多行,直到读取完整的表达式。因此,您可以通过确保在给定行的末尾没有完整的表达式来跨多行打破表达式。

考虑

x = 1
+ 2

这段代码在第一行有一个完整的表达式(x = 1 是一个有效的、完整的表达式)所以 R 不会继续到下一行——它计算表达式 x = 1。之后,x 的值为 1。

x = 1 +
2

相比之下,这段代码 没有 在其第一行有一个完整的表达式(x = 1 + 将是无效的)所以 R 继续到下一行并且然后才计算表达式 x = 1 + 2。之后,x 的值为 3.

%>%运算符也是如此。所以你有多种选择。例如,这是通常推荐的方式,您可以在 %>%:

中结束行
Object %>%
    mutate() %>%
    select() %>%
    …

相反,有些人更喜欢在行首 %>% 。但是为了使这项工作有效,我们需要做一些事情来使表达式 not-complete。简单:用括号括起来:

(Object
    %>% mutate()
    %>% select()
    %>% …
)

第二种风格显然不太常见(有些人非常不喜欢它,因为多余的括号会增加视觉上的混乱),但它确实有它的支持者。