如何使用具有多参数函数的magrittr管道?

对于单参数函数,将“标准”R代码翻译为magrittr管道样式是相当简单的。如何使用具有多参数函数的magrittr管道?

mean(rnorm(100)) 

成为

rnorm(100) %>% mean 

对于多参数的函数,这是我不明白什么是最好的生活方式是。有两种情况。

首先,附加参数是常量的情况。在这种情况下,您可以创建一个匿名函数来更改常量值。例如:

mean(rnorm(100, trim = 0.5)) 

变得

rnorm(100) %>% (function(x) mean(x, trim = 0.5)) 

其次,如果需要多个参数向量的情况下。在这种情况下,您可以将输入组合到一个列表中,并创建一个匿名函数,该函数对列表元素进行操作。

cor(rnorm(100), runif(100)) 

成为

list(x = rnorm(100), y = runif(100)) %>% (function(l) with(l, cor(x, y))) 

在这两种情况下,我的解决方案似乎不多,所以我觉得我缺少一个更好的方式来做到这一点笨重。我应该如何将多个参数传递给函数?

回答:

使用PIPER封装为COR-例的解决办法是:

PIPER:

set.seed(123) 

rnorm(100) %>>% cor(runif(100))

[1] 0.05564807

margrittr:

set.seed(123) 

rnorm(100) %>% cor(y = runif(100))

[1] 0.05564807

有一个极好的PIPER教程available来自包的授权者。没有太多:-)

回答:

第一个问题可以通过%>%的巧妙评估来解决。笨重的解决方案简化为:

rnorm(100) %>% mean(trim = 0.5) 

第二个问题可以通过类似的方式简化,但不清楚这是否是“最佳”解决方案。

rnorm(100) %>% cor(y = runif(100)) 

回答:

以V 1.5在这种情况下的差异有两种选择:

list(x = rnorm(100), y = runif(100)) %$% cor(x, y) 

这是essemtially一样

list(x = rnorm(100), y = runif(100)) %>% with(cor(x, y)) # you could also do this earlier 

或者

list(x = rnorm(100), y = runif(100)) %>% { cor(.$x, .$y) } 

{对在运行中创建一个lambda(一元函数),因此您不必完成整个(function(x) { ... })的事。作为一个附注,insetinset2别名可以被用来“拾取”流水线中的值,例如,名单。

以上是 如何使用具有多参数函数的magrittr管道? 的全部内容, 来源链接: utcz.com/qa/267310.html

回到顶部