假设我有一组用于数据处理的函数,例如:

procA <- function(input){
  cat('\n Now processing #A') # message just to log pipeline flow 
  
  # Actual data processing, may include some diagnostic messaging:
  cat('\n #A: ', dim(input))
  input$procA <- 'procA'
  
  return(input)
}

procB <- function(input){
  cat('\n Now processing #B') # message just to log pipeline flow 
  
  # Actual data processing, may include some diagnostic messaging:
  cat('\n #B: ', dim(input))
  input$procB <- 'procB' 
  
  return(input)
}

procC <- function(input){
  cat('\n Now processing #C') # message just to log pipeline flow 
  
  # Actual data processing, may include some diagnostic messaging:
  cat('\n #C: ', dim(input))
  input$procC <- 'procC' 
  
  return(input)
}

我将它们组合成一条管道,例如:

data(iris)

iris_processed <-
  iris %>% 
  procA %>% 
  procB %>% 
  procC

消息传送输出如下所示:

Now processing #C
Now processing #B
Now processing #A
#A: 150 5
#B: 150 6
#C: 150 7

由于延迟计算,这些日志(log)消息以相反的顺序发送,这使得我更难调试管道.到目前为止,我的解决方案是在每个函数的开头添加input <- eval(input).是否有更好的解决方案、良好的实践标准等?

推荐答案

我们可以使用Magrittr Eight管道.请注意,需要library(magrittr)分.仅仅使用library(dplyr)是不够的.

library(magrittr)

iris_processed <-
  iris %!>% 
  procA %!>% 
  procB %!>% 
  procC

## Now processing #A
##  #A:  150 5
##  Now processing #B
##  #B:  150 6
##  Now processing #C
##  #C:  150 7> 

R相关问答推荐

geom_raster不适用于x比例中超过2,15的值

变量计算按R中的行更改

根据收件箱中的特定值提取列名

对lme 4对象运行summary()时出错(diag中的错误(from,names = RST):对象unpackedMatrix_diag_get找不到)

基于多列将值链接到NA

IMF IFS数据以R表示

如何在所有绘图中保持条件值的 colored颜色 相同?

`lazy_dt`不支持`dplyr/across`?

绘制采样开始和采样结束之间的事件

用约翰逊分布进行均值比较

将向量元素重新排序为R中的第二个

如何在使用箭头R包(箭头::OPEN_DATASSET)和dplyr谓词时编写具有整齐计算的函数?

如何移除GGPlot中超出与面相交的任何格网像元

在使用具有Bray-Curtis相似性的pvCluust时计算p值

R -基线图-图形周围的阴影区域

计算使一组输入值最小化的a、b和c的值

从线的交点创建面

判断函数未加载R中的库

自定义交互作用图的标签

使用LAG和dplyr执行计算,以便按行和按组迭代