R:写入CSV并继续通过管道

时间:2015-07-17 07:12:16

标签: r dplyr

有没有办法在一串管道dplyr函数中包含对write.csv的调用?

library(dplyr)
mtcars %>% 
  filter(cyl == 4) %>% 
  write.csv(file = "firstStage.csv") %>% 
  group_by(carb) %>% 
  summarise(hp.sum = sum(hp)) %>%
  write.csv(file = "secondStage.csv")

我可以创建自己的功能:

csv2go <- function(x, ...) {
  write.csv(x, ...)
  x
}

但是想知道在base或dplyr中是否存在这样的事情。也许write_csv()中的library(readr)函数可以采用此选项吗?

2 个答案:

答案 0 :(得分:10)

非常简单!!!你需要做的就是添加一个字符&#34; T&#34;将常规管道运算符%&gt;%转换为Tee管道运算符%T&gt;%,如下所示:

library(dplyr)
mtcars %>% 
   filter(cyl == 4) %T>%                  # <== Tee-pipe operator 
   write.csv(file = "firstStage.csv") %>% 
   group_by(carb) %>% 
   summarise(hp.sum = sum(hp)) %>%
   write.csv(file = "secondStage.csv") 

%T&gt;%是您的新朋友

答案 1 :(得分:1)

这样的东西你需要什么?这就是我将csvs写入HDFS的方法。

write.csv(data, file=pipe("hadoop dfs -put - /tmp/test.csv"))