Есть ли способ я могу переработать элементы более короткого списка в purrr :: map2 или purrr :: walk2? - PullRequest
0 голосов
/ 18 января 2019

purrr не поддерживает переработку элементов вектора в случае нехватки элементов в одном из двух (при использовании purrr::map2 или purrr::walk2). В отличие от 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) имеют разную длину

Я очень хорошо понимаю, почему это не разрешено - поскольку это может затруднить отлов ошибок. Но есть ли способ мурлыкать, чтобы я мог заставить это произойти? Возможно, использовать какой-то трюк с базовым R и мурлыкать?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Это дизайн с 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
0 голосов
/ 18 января 2019

Вы можете поместить оба списка в кадр данных и позволить этой команде повторять ваши векторы:

input <- data.frame(a = 1:3, b = 4:9)
purrr::map2(input$a, input$b, sum)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...