【问题标题】:Print dataframe to console during intermediate steps in dplyr chain在 dplyr 链的中间步骤期间将数据帧打印到控制台
【发布时间】:2022-01-16 14:27:01
【问题描述】:

在函数中调试 dplyr 链时,我经常希望能够将 data.frame 的中间更改打印到控制台。我该怎么做?

例如:

data(cars)
cars %>% group_by(speed) %>% 
  summarize(dist_mean = mean(dist)) %>%
  [insert printing function] %>% 
  group_by(speed > 10) %>%
  summarize(dist_mean = mean(dist_mean)) %>%
  [insert printing function]

我可以做些什么来替换 [insert printing function] 以将数据帧的当前状态打印到控制台,同时仍然不间断地继续链吗?

【问题讨论】:

标签: r dplyr


【解决方案1】:

试试 T 形管:%T>%

来自文档:

将值转发到函数或调用表达式并返回原始值而不是结果。当表达式用于其副作用时,这很有用,例如绘图或打印。

有一个很好的例子here 以及其他两个不太常见的管道命令。

插入回原来的上下文:

data(cars)
cars %>% group_by(speed) %>% 
  summarize(dist_mean = mean(dist)) %T>%
  print() %>% 
  group_by(speed > 10) %>%
  summarize(dist_mean = mean(dist_mean)) %T>%
  print()

编辑:根据@Ritchie Sacramento 的评论,管道是 magrittr 包的一部分。它们似乎也被 dplyr 重新导出。如果在调用library(dplyr) 后它们不起作用,那么您需要调用library(magrittr) 才能访问它们。

【讨论】:

  • 这是完美的。谢谢!
  • 除非用户点击您的链接,否则他们可能不知道%T>%magrittr 函数而不是dplyr 函数。您可以通过指定必要的库调用来改进您的答案。
  • 谢谢里奇。所有四个管道都由 dplyr pacakge 重新导出。所以开发者可以写library(dplyr)或者library(magrittr)来使用它们。我已经更新了答案以反映这一点。
  • 恐怕这不正确 - dplyr 仅导出 %>%。尝试新会话并仅加载 dplyr,您将看到或查看 ?dplyr::reexports
  • 嗯...这很奇怪。我刚刚对其进行了测试,并在仅调用dplyr 后成功使用了%T>%。我什至检查并确认未加载 magrittr 包。也许文档和重新导出不同步?
猜你喜欢
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多