首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用purrr捕获mapply错误

使用purrr捕获mapply错误
EN

Stack Overflow用户
提问于 2018-05-04 15:29:36
回答 1查看 283关注 0票数 2

我正在掌握包purrr,以及如何使用它来捕捉代码的问题。当输出与mapply一起使用时,我似乎不理解它。下面我已经概述了一个工作示例,这是实现代码的正确方法吗?

代码语言:javascript
复制
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似乎只返回错误?

代码语言:javascript
复制
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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-04 16:58:31

您的x.bad是一个字符向量。这就是这个例子中的问题。如果您将x.bad更改为一个列表(在安全的示例中),它将工作,因为只有"A“将被定义为字符,其余的将是数字。

代码语言:javascript
复制
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

今天,一个博客出现了,它以更多的细节为例。你可以找到它,这里

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50178408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档