如何在R语言基础管道|>中正确使用Map函数?
在R基础管道
|>中使用Map的问题解析 为什么用占位符_会报错?
Map的参数定义是Map(f, ...),第一个参数必须是要应用的函数,后面的...用来接收待迭代的对象集合。而R的基础管道|>默认会把左侧输入值传递给右侧函数的第一个位置参数。
当你写x |> Map(function(n)n*2, ...= _)时,管道会优先把x传给Map的第一个参数,但这个位置已经被匿名函数function(n)n*2占据。此时你试图用...= _把x塞到...里,但实际执行时,这个_会被当成额外参数传给匿名函数——而匿名函数只接受n这一个参数,因此会抛出unused argument的错误。
可行的解决方案
1. 嵌套匿名函数(可读性较差但直接可用)
通过嵌套匿名函数,把管道传递的x作为参数传入,再在内部调用Map保证参数顺序正确:
x <- c(1,5,1,2) x |> (function(x) Map(function(n)n*2,x))() |> unlist() # [1] 2 10 2 4
2. 自定义调整参数顺序的myMap函数
重新封装Map,把函数参数f放到最后,这样管道可以自然把x传给前面的...参数组:
myMap <- \(...,f) Map(f, ...) x <- c(1,5,1,2) x |> myMap(f = function(n)n*2) |> unlist() # [1] 2 10 2 4
内容的提问来源于stack exchange,提问作者juarpasi
相关产品推荐
相关产品推荐

