当它有零行和 n() 列时从列表中删除 tibble

delete tibble from list when it has zero rows and n() columns

所以我有一个脚本可以生成一组列表作为输出。它第一次在一个包含零行的列表中生成了一个 tibble:

(图片中的测试列表[[2]])

这已经停止了前进的进程。

我发现了几个关于删除空小标题或类似内容的线程,当它们是与小标题或列表相关联的某些操作时,我试图提取建议的几个过滤器部分以仅删除小标题部分和有几个 运行,但 none 有效。

我只想从我的列表中删除所有带有“0 行”的标题。在这种情况下,列表中的 testlist[[2]]。我知道这必须非常简单,但我被卡住了。

list_of_mtcars <- list(mtcars[1,], mtcars[1:2,], mtcars[0,])
list_of_mtcars
# [[1]]
#           mpg cyl disp  hp drat   wt  qsec vs am gear carb
# Mazda RX4  21   6  160 110  3.9 2.62 16.46  0  1    4    4
# [[2]]
#               mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
# Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
# [[3]]
#  [1] mpg  cyl  disp hp   drat wt   qsec vs   am   gear carb
# <0 rows> (or 0-length row.names)

Filter(nrow, list_of_mtcars)
# [[1]]
#           mpg cyl disp  hp drat   wt  qsec vs am gear carb
# Mazda RX4  21   6  160 110  3.9 2.62 16.46  0  1    4    4
# [[2]]
#               mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
# Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4

使用 purrr::map_lgl 的选项。

library(purrr)

tblList[map_lgl(tblList, ~ nrow(.) != 0)]

# [[1]]
# # A tibble: 1 x 1
#         x
#     <dbl>
#   1     1
# 
# [[2]]
# # A tibble: 1 x 1
#         x
#     <dbl>
#   1     2

数据

tblList <- list(structure(list(x = 1), row.names = c(NA, -1L), class = c("tbl_df", 
"tbl", "data.frame")), structure(list(x = numeric(0)), row.names = integer(0), class = c("tbl_df", 
"tbl", "data.frame")), structure(list(x = 2), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame")))

选项keep

library(purrr)
keep(testlist, ~ nrow(.x) > 0)