r - 如何处理“pmap”错误和“安全”包装的函数的结果输出。不能取消嵌套
问题描述
我经常使用 PURRR 的 pmap 函数在输入表的行上应用函数并内联检索它们。最近我开始使用“安全”的函数,它包裹着我在 pmap 函数中应用的函数。这很好用,但是当输出列中的错误和结果都可用时,我很难弄清楚如何处理它的输出。
我想内联提取错误“消息”对象,但是由于 NA 和错误的混合,这似乎是不可能的?有谁知道如何做到这一点?
library(tidyverse)
library(openxlsx)
example_data <- tribble(~input_col,
r"(C:\Users\Documents\example data.xlsx)",
r"(C:\does not exist.xlsx)")
result <- example_data %>%
mutate(function_output = pmap(list(xlsxFile = input_col), safely(read.xlsx)))
#returns result and error columns
result %>%
unnest_wider(col = function_output, names_sep='_') %>%
View()
#does not return the error message?
result %>%
unnest_wider(col = function_output) %>%
mutate(error_message=error$message) %>%
View()
# This seems to extract all the items from the list object but does not preserve table structure
result %>% unnest_wider(col = function_output) %>%
mutate(across(where(is.list) & starts_with("error"), flatten)) %>%
View()
解决方案
使用map
和pluck
-
library(tidyverse)
result %>%
unnest_wider(col = function_output) %>%
mutate(error_message = map(error, pluck, 'message'))
或者 -
result %>%
unnest_wider(col = function_output) %>%
mutate(error_message = map_chr(error,
~if(is.null(.x)) NA_character_ else .x$message))
# input_col result error error_message
# <chr> <list> <list> <chr>
#1 result.xlsx <df [3 × 12]> <NULL> NA
#2 does not exist.xlsx <NULL> <smplErrr> File does not exist.
推荐阅读
- prisma - Prisma2 无法转换为“timestamptz”类型的 Postgres 值或从其转换
- r - 使用数据框的独特组合的折线图
- tfs - TFS 2017 - 无法修改当前迭代板
- iis - 如何使用 Microsoft Active Directory 证书服务更新证书
- mongodb - 如何在 MongoDB 中编写查询以代表 MongoDB 中的自定义 ID 搜索两个日期之间的数据
- javascript - 我如何在反应本机应用程序中保留数据?
- frequency - iCalendar 开放时间
- html - Outlook 电子邮件签名和超链接线颜色
- javascript - 如何在基于单选按钮的 onClick 事件中添加 if-else 语句
- javascript - 将 html 元素映射到 json 对象