管道中的 R 打印强制错误类型

问题描述

在管道中使用 print() 时,它似乎将 x 强制为 .

seq(1,10,1) %T>% print(x=summary(.)) %>% summary()

给予

Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1       3       6       6       8      10 
Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
1.00    3.25    5.50    5.50    7.75   10.00 

我最初想要的是在 summary() 之外得到 sd() 并尝试过:

seq(1,1) %T>% print(x=sd(.)) %>% summary()

但得到:

[1] 3
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    3.25    5.50    5.50    7.75   10.00 
> 

我尝试了 cat() 和 c() 的变体,但数字 1:10 进入了这些函数的第一个点。

一般的问题是有没有一种方法可以使用管道运算符来显示通过管道移动的内容的多个摘要函数。我知道我可以使用一个以 sd() 结尾的管道和一个以 summary() 结尾的第二个管道 - 但我的管道的开头比 seq(1,1) 复杂得多,我想避免重复或保存变成一个对象。

解决方法

用括号括起来

library(magrittr)
seq(1,10,1) %T>% 
        {print(x=summary(.))} %>%
         summary
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    3.25    5.50    5.50    7.75   10.00 
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    3.25    5.50    5.50    7.75   10.00 

或者第二种情况

seq(1,1) %T>% {print(x=sd(.))} %>% summary()
[1] 3.02765
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    3.25    5.50    5.50    7.75   10.00