如何在不使用rep()的情况下让map2()实现短向量循环复用?
解决map2()无法自动循环复用短向量的问题
问题重现
运行以下代码时出现错误:
xx <- 1:12 yy <- 1:3 map2(xx, yy, ~ .x / .y)
预期map2()会自动循环较短的yy向量以匹配xx的长度,得到如下输出:
1 1 1 4 2.5 2 7 4 3 10 5.5 4
但实际因向量长度不匹配报错。
解决方案
map2()的设计逻辑是要求两个输入向量长度完全一致,不会自动循环短向量。无需手动调用rep()的话,可以用以下两种方法:
方法1:使用purrr::vec_recycle()自动扩展短向量
vec_recycle()可以自动将短向量循环扩展到目标长度,配合map2()使用:
library(purrr) xx <- 1:12 yy <- 1:3 map2(xx, vec_recycle(yy, length(xx)), ~ .x / .y)
方法2:改用基础R的mapply()
mapply()默认支持短向量的自动循环,效果和预期一致:
xx <- 1:12 yy <- 1:3 mapply(function(x, y) x/y, xx, yy)
内容的提问来源于stack exchange,提问作者Jenny Chung
相关产品推荐
相关产品推荐

