используя purrr для перехвата ошибок с mapply - PullRequest
0 голосов
/ 04 мая 2018

Я справляюсь с пакетом purrr и с тем, как его можно использовать для обнаружения проблем с кодом. Кажется, я не понимаю вывод, когда он используется с mapply. Ниже я изложил рабочий пример, это правильный способ реализации кода?

x.good <- c(2, 2, 3, 3)
x.bad <- c(2, 2, "A", 3)
y <- c(2, 2, 3, 3)
mapply(sum, x.good, y) # works just fine
mapply(sum, x.bad, y)  # understandably makes R unhappy

# Define a new function
library(purrr)
safe_sum <- safely(sum, otherwise=NA_real_)

# apply it
res <- mapply(safe_sum, x.bad, y)

res
       2      2      A      3     
result NA     NA     NA     NA    
error  List,2 List,2 List,2 List,2

В уроках также используется функция map, требуется ли это и здесь?

Обновление

работает map2, кажется, только возвращает ошибки?

map2(x.bad, y, safe_sum)
[[1]]
[[1]]$result
[1] NA

[[1]]$error
<simpleError in sum(..., na.rm = na.rm): invalid 'type' (character) of     argument>


[[2]]
[[2]]$result
[1] NA

[[2]]$error
<simpleError in sum(..., na.rm = na.rm): invalid 'type' (character) of argument>


[[3]]
[[3]]$result
[1] NA

[[3]]$error
<simpleError in sum(..., na.rm = na.rm): invalid 'type' (character) of argument>


[[4]]
[[4]]$result
[1] NA

[[4]]$error
<simpleError in sum(..., na.rm = na.rm): invalid 'type' (character) of argument>

1 Ответ

0 голосов
/ 04 мая 2018

Ваш x.bad является символьным вектором. Это проблема в этом примере. Если вы измените x.bad в список, как в безопасных примерах, он будет работать, потому что только символ «A» будет определен как символ, а остальные будут числовыми.

x.bad <- list(2, 2, "A", 3)
y <- c(2, 2, 3, 3)

library(purrr)

safe_sum <- safely(sum, otherwise=NA_real_)
map2(x.bad, y, safe_sum)
[[1]]
[[1]]$result
[1] 4

[[1]]$error
NULL


[[2]]
[[2]]$result
[1] 4

[[2]]$error
NULL


[[3]]
[[3]]$result
[1] NA

[[3]]$error
<simpleError in sum(..., na.rm = na.rm): invalid 'type' (character) of argument>


[[4]]
[[4]]$result
[1] 6

[[4]]$error
NULL

Сегодня появился блог, который более детально описан с примерами. Вы можете найти это здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...