imap(x, ...)
是一个索引映射,如果 x
有名称,则为 map2(x, names(x), ...)
的简写形式,如果没有名称,则为 map2(x, seq_along(x), ...)
的简写形式。如果您需要计算元素的值和位置,这非常有用。
用法
imap(.x, .f, ...)
imap_lgl(.x, .f, ...)
imap_chr(.x, .f, ...)
imap_int(.x, .f, ...)
imap_dbl(.x, .f, ...)
iwalk(.x, .f, ...)
参数
- .x
-
列表或原子向量。
- .f
-
一个函数,通过以下方式之一指定:
-
命名函数,例如
paste
。 -
匿名函数,例如
\(x, idx) x + idx
或function(x, idx) x + idx
。 -
一个公式,例如
~ .x + .y
。您必须使用.x
来引用当前元素,并使用.y
来引用当前索引。仅当您需要向后兼容旧版本的 R 时才推荐。
-
- ...
-
传递给映射函数的附加参数。
我们现在通常建议不要使用
...
将附加(常量)参数传递给.f
。相反,使用简写匿名函数:# Instead of x |> map(f, 1, 2, collapse = ",") # do: x |> map(\(x) f(x, 1, 2, collapse = ","))
这使得更容易理解哪些参数属于哪个函数,并且往往会产生更好的错误消息。
例子
imap_chr(sample(10), paste)
#> [1] "5 1" "7 2" "2 3" "3 4" "1 5" "10 6" "8 7" "6 8" "9 9" "4 10"
imap_chr(sample(10), \(x, idx) paste0(idx, ": ", x))
#> [1] "1: 5" "2: 3" "3: 8" "4: 6" "5: 10" "6: 1" "7: 2" "8: 7"
#> [9] "9: 4" "10: 9"
iwalk(mtcars, \(x, idx) cat(idx, ": ", median(x), "\n", sep = ""))
#> mpg: 19.2
#> cyl: 6
#> disp: 196.3
#> hp: 123
#> drat: 3.695
#> wt: 3.325
#> qsec: 17.71
#> vs: 0
#> am: 0
#> gear: 4
#> carb: 2
相关用法
- R purrr insistently 将函数转换为等待,然后在错误后重试
- R purrr accumulate 累积向量缩减的中间结果
- R purrr list_transpose 转置列表
- R purrr as_vector 将列表强制转换为向量
- R purrr map_if 有条件地将函数应用于向量的每个元素
- R purrr map2 映射两个输入
- R purrr array-coercion 强制数组列出
- R purrr auto_browse 包装一个函数,以便在出错时自动 browser()
- R purrr pluck 安全地获取或设置嵌套数据结构深处的元素
- R purrr map_depth 在给定深度映射/修改元素
- R purrr list_simplify 将列表简化为原子或 S3 向量
- R purrr rerun 多次重新运行表达式
- R purrr quietly 包装一个函数来捕获副作用
- R purrr list_flatten 压平列表
- R purrr pmap 同时映射多个输入(“并行”)
- R purrr possibly 包装函数以返回值而不是错误
- R purrr head_while 查找全部满足谓词的头/尾。
- R purrr rbernoulli 从伯努利分布生成随机样本
- R purrr rate-helpers 创建延迟率设置
- R purrr keep_at 根据元素的名称/位置保留/丢弃元素
- R purrr keep 根据元素的值保留/丢弃元素
- R purrr transpose 转置列表。
- R purrr flatten 将列表的列表展平为简单的向量
- R purrr every 列表中的每个元素、部分元素还是没有一个元素满足谓词?
- R purrr detect 查找第一个匹配的值或位置
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Apply a function to each element of a vector, and its index。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。