jua*_*asi 5 r higher-order-functions map-function
如何Map与管座一起使用该功能|>?
下一个向量可以在函数x内部使用Map
x <- c(1,5,1,2)
Map(function(n)n*2, x) |> unlist()
# [1] 2 10 2 4
Run Code Online (Sandbox Code Playgroud)
这有效,但是当我尝试使用管道时,出现下一个错误:
x |> Map(function(n)n*2, ...= _)
#Error in (function (n) : unused argument (... = dots[[1]][[1]])
Run Code Online (Sandbox Code Playgroud)
所以我又做了一个匿名函数,但是很难读
x |> (function(x) Map(function(n)n*2,x))() |> unlist()
#[1] 2 10 2 4
Run Code Online (Sandbox Code Playgroud)
我想知道为什么Map不能占据占位符 _。
我改变了参数的顺序Map所以它可以更清晰
myMap <- \(...,f) Map(f, ...)
x |> myMap(f = function(n)n*2) |> unlist()
#[1] 2 10 2 4
Run Code Online (Sandbox Code Playgroud)
您可以尝试命名该函数,以便管道使用第一个空闲位置。
x |> Map(f=function(n)n*2) |> unlist()
#[1] 2 10 2 4
Run Code Online (Sandbox Code Playgroud)
但是Map或mapply典型用于多个参数,这里位置或给定的名称很重要。当前占位符_(R 4.3.0)需要命名参数,也适用于仅具有...但此处可以使用任何自由名称的函数。
1:3 |> mapply(`paste`, 1, .=_)
#[1] "1 1" "1 2" "1 3"
1:3 |> mapply(`paste`, .=_, 1)
#[1] "1 1" "2 1" "3 1"
1:3 |> mapply(`paste`, x=_, 1)
#[1] "1 1" "2 1" "3 1"
Run Code Online (Sandbox Code Playgroud)
如果函数使用名称,则需要使用相同的名称作为Mapor的参数mapply。
1:3 |> Map(seq, 1, to=_)
#[[1]]
#[1] 1
#
#[[2]]
#[1] 1 2
#
#[[3]]
#[1] 1 2 3
1:3 |> Map(seq, 1, from=_)
#[[1]]
#[1] 1
#
#[[2]]
#[1] 2 1
#
#[[3]]
#[1] 3 2 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |