R 删除为零行TIBLES的列表元素

R 删除为零行TIBLES的列表元素,r,tidyverse,purrr,R,Tidyverse,Purrr,我有一张藏书的清单。我正在尝试对所有tibble共有的列进行筛选,然后删除所有以零行结尾的tibble(但从技术上讲,这些tibble并不是空的,因为它们有列)。似乎purrr:::compact()就是为了这个目的而设计的,但我认为我没有完全正确。有更好的解决办法吗 require(tidyverse) #>装载所需包裹:tidyverse mylst%as.tibble(),cars2=cars%%>%as.tibble()%%>%mutate(速度=速度+100)) #这将生成一个包含零行

我有一张藏书的清单。我正在尝试对所有tibble共有的列进行筛选,然后删除所有以零行结尾的tibble(但从技术上讲,这些tibble并不是空的,因为它们有列)。似乎
purrr:::compact()
就是为了这个目的而设计的,但我认为我没有完全正确。有更好的解决办法吗

require(tidyverse)
#>装载所需包裹:tidyverse
mylst%as.tibble(),cars2=cars%%>%as.tibble()%%>%mutate(速度=速度+100))
#这将生成一个包含零行可绑定元素的列表:
mylst%>%map(函数(x)过滤器(x,速度==125))
#>$cars1
#>#tible:0 x 2
#> # ... 有两个变量:速度、距离
#> 
#>$cars2
#>#A tible:1 x 2
#>速度距离
#>    
#> 1  125.   85
#这导致了同样的结果:
mylst%>%map(函数(x)过滤器(x,速度=125))%>%compact()
#>$cars1
#>#tible:0 x 2
#> # ... 有两个变量:速度、距离
#> 
#>$cars2
#>#A tible:1 x 2
#>速度距离
#>    
#> 1  125.   85
#将compact放在map函数中会将$cars1减少到0x0,但它仍然存在:
mylst%%>%map(函数(x)过滤器(x,速度==125)%%>%compact())
#>$cars1
#>#tible:0 x 0
#> 
#>$cars2
#>#A tible:1 x 2
#>速度距离
#>    
#> 1  125.   85
#这最终删除了空元素,但看起来很笨拙。
mylst%%>%map(函数(x)过滤器(x,速度=125)%%>%compact())%%>%compact()
#>$cars2
#>#A tible:1 x 2
#>速度距离
#>    
#> 1  125.   85

由(v0.2.0)于2018-04-06创建。

您正试图使用
compact
,但这只过滤掉
NULL
元素。要过滤掉零行元素,可以使用
放弃

mylst %>% 
    map(function(x) filter(x, speed == 125)) %>% 
    discard(function(x) nrow(x) == 0)
#$cars2
## A tibble: 1 x 2
#  speed  dist
#  <dbl> <dbl>
#1  125.   85.
mylst%>%
映射(函数(x)过滤器(x,速度==125))%>%
丢弃(功能(x)nrow(x)==0)
#$cars2
##一个tibble:1x2
#速度距离
#   
#1  125.   85
放弃(~nrow(.x)==0)
以获得更精简的内容