在管道 %>% 中保存 RDS 并将其 return 对象

saveRDS in a pipe %>% and have it return the object

有没有办法在管道 %>% 链中使用 saveRDS?

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

这目前给出一个错误,因为 saveRDS return 为空。

我想要 saveRDS() 到 return c(1,2,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

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

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

# returns 2

我们可以使用 magrittr

中的 tee (%T>) 运算符
library(magrittr)
1:3 %T>% 
   saveRDS(file="123.rda") %>%
   mean
#[1] 2

如果我们想return同一个对象,使用I

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

根据?"%T>%"

Pipe a value forward into a function- or call expression and return the original value instead of theresult. This is useful when an expression is used for its side-effect, say plotting or printing.