首页 > 解决方案 > 管道中的 R print() 强制类型错误

问题描述

当 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,10,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,10,1) 复杂得多,我想避免重复或保存成一个对象。

标签: rpipe

解决方案


将其包裹在括号内

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,10,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 

推荐阅读