使用purrr跳过由于数据中的空列表而遇到的错误

使用purrr跳过由于数据中的空列表而遇到的错误,r,purrr,R,Purrr,我有两种类型的列表,一种是填充的,另一种是未填充的 我可以运行以下代码来处理和清理列表 library(purrr) library(tidyverse) list1 %>% map(., ~unlist(.x) %>% data.frame() %>% rownames_to_column("tag") %>% setNames(c("tag", "info&qu

我有两种类型的列表,一种是填充的,另一种是未填充的

我可以运行以下代码来处理和清理列表

library(purrr)
library(tidyverse)
list1 %>%
  map(., ~unlist(.x) %>% 
        data.frame() %>% 
        rownames_to_column("tag") %>% 
        setNames(c("tag", "info")) %>% # renames the columns
        pivot_wider(names_from = "tag", values_from = "info")) %>% 
  setNames(c(paste("skills", seq_along(1:length(.)), sep = "_"))) %>%  # renames the list
  bind_rows()
其中:

# A tibble: 6 x 2
  name   endorsements
  <chr>  <chr>       
1 skill1 9           
2 skill2 8           
3 skill3 6           
4 skill4 5           
5 skill5 4           
6 skill6 3  
我得到这个错误:


名称(对象)错误从
tidyselect
包将
setNames
更改为
vars\u rename
,这允许您通过设置
strict=FALSE来跳过缺少的列

library(purrr)
library(dplyr)
library(tidyselect)
list2 %>%
  map(., ~unlist(.x) %>% 
        data.frame() %>% 
        rownames_to_column("tag") %>% 
        vars_rename(c("tag", "info"), strict = FALSE) %>% # renames the columns
        pivot_wider(names_from = "tag", values_from = "info"))
[1] list()
不过,这在后期仍然会失败,但这是由于您如何使用
paste0
造成的

list2 %>% 
    vars_rename(c(paste('skills', seq_along(.), sep = '_')), strict = FALSE)
错误:
vars
必须是字符向量
运行
rlang::last_error()
查看错误发生的位置


问题很简单,
paste('skills',seq_-along(.),sep='u')
将返回
list()
vars\u rename
,这要求第一个输入是字符向量。一些错误处理似乎是有序的,或者只是测试部分结果是否为空列表。

函数中的
if\u else
语句如何检查错误/空列表,如果是,则不返回任何内容?
list2 <- list()
library(purrr)
library(dplyr)
library(tidyselect)
list2 %>%
  map(., ~unlist(.x) %>% 
        data.frame() %>% 
        rownames_to_column("tag") %>% 
        vars_rename(c("tag", "info"), strict = FALSE) %>% # renames the columns
        pivot_wider(names_from = "tag", values_from = "info"))
[1] list()
list2 %>% 
    vars_rename(c(paste('skills', seq_along(.), sep = '_')), strict = FALSE)