对于单个参数函数,将“标准”R代码转换为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)))  在这两种情况下,我的解决方案看起来都很笨重,以至于我觉得我错过了一种更好的方法来做到这一点。我应该如何将多个参数输送到函数?
发布于 2014-09-21 15:25:59
使用pipeR包,cor-示例的解决方案将是:
pipeR:
set.seed(123)
rnorm(100) %>>% cor(runif(100))
[1] 0.05564807margrittr:
set.seed(123)
rnorm(100) %>% cor(y = runif(100))
[1] 0.05564807有一个优秀的pipeR教程可用来自于包的作者。在这种情况下没有太大的区别:-)
发布于 2014-11-24 09:57:33
在第1.5节中,有两种选择:
list(x = rnorm(100), y = runif(100)) %$% cor(x, y) 它本质上与
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别名可以用来在管道中,例如列表中“获取”值。
发布于 2014-09-21 11:29:17
第一个问题可以通过%>%的巧妙评估来解决。这个笨重的解决方案简化为
rnorm(100) %>% mean(trim = 0.5)第二个问题可以用类似的方式进行简化,但目前还不清楚这是否是“最佳”解决方案。
rnorm(100) %>% cor(y = runif(100))https://stackoverflow.com/questions/25958627
复制相似问题