在管道%>%中保存saveRDS并让其返回对象

时间:2019-06-20 13:37:49

标签: r magrittr

是否可以在管道%>%链中使用saveRDS?

c(1,2,3) %>% 
saveRDS(file="123.rda") %>% 
mean()

当前这会导致错误,因为saveRDS返回null。

我希望saveRDS()返回c(1,2,3)!

3 个答案:

答案 0 :(得分:3)

也许编写自己的函数,其功能符合您的期望

save_and_return_RDS <- function(x) {
   saveRDS(x, file="123.rda")
   return(x)
}

然后使用它

c(1, 2, 3) %>% save_and_return_RDS()
#[1] 1 2 3

答案 1 :(得分:3)

我们可以使用tee中的%T>magrittr)运算符

library(magrittr)
1:3 %T>% 
   saveRDS(file="123.rda") %>%
   mean
#[1] 2

如果我们想返回相同的对象,请使用I

1:3 %T>% 
  saveRDS(file="123.rda") %>%
  I
#[1] 1 2 3

根据?"%T>%"

  

将值向前放置到函数或调用表达式中,然后返回原始值而不是结果。当将表达式用于其副作用(例如绘图或打印)时,这很有用。

答案 2 :(得分:2)

save_RDS包中使用tsfe!它返回一个可以在管道中使用的不可见对象。

c(1,2,3) %>% 
tfse::save_RDS("x.rda") %>% 
mean()

# returns 2