purrr
似乎不支持向量元素的回收,以防这两个元素之一缺少元素(使用purrr::map2
或purrr::walk2
时)。与baseR不同,在baseR中,如果较大的向量不是较短的向量的倍数,我们只会收到警告。
考虑这个玩具示例:
这有效:
map2(1:3,4:6,sum)
#
#[[1]]
#[1] 5
#[[2]]
#[1] 7
#[[3]]
#[1] 9
这不起作用:
map2(1:3,4:9,sum)
错误:
.x
(3)和.y
(6)的长度不同
我非常清楚为什么不允许这样做-因为这样做会使捕获错误非常困难。但是有什么办法可以使这种情况发生吗?也许在purrr中使用一些基本的R技巧?
答案 0 :(得分:1)
您可以将两个列表都放在一个数据框中,然后让该命令重复您的向量:
input <- data.frame(a = 1:3, b = 4:9)
purrr::map2(input$a, input$b, sum)
答案 1 :(得分:0)
它是通过 purrr
设计的,但是您可以使用Map
:
Map(sum,1:3,4:9)
# [[1]]
# [1] 5
#
# [[2]]
# [1] 7
#
# [[3]]
# [1] 9
#
# [[4]]
# [1] 8
#
# [[5]]
# [1] 10
#
# [[6]]
# [1] 12
如果需要的话,这就是我将如何循环使用的方法:
x <- 1:3
y <- 4:9
l <- max(length(y), length(x))
map2(rep(x,len = l), rep(y,len = l),sum)
# [[1]]
# [1] 5
#
# [[2]]
# [1] 7
#
# [[3]]
# [1] 9
#
# [[4]]
# [1] 8
#
# [[5]]
# [1] 10
#
# [[6]]
# [1] 12