如何使用具有多参数函数的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) { ... })
的事。作为一个附注,inset
和inset2
别名可以被用来“拾取”流水线中的值,例如,名单。
以上是 如何使用具有多参数函数的magrittr管道? 的全部内容, 来源链接: utcz.com/qa/267310.html