使用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)