通过管道/dplyr 友好的方式过滤向量的非零元素

Luc*_*ion 6 r pipe dplyr tidyverse

令人惊讶的是我没有找到这个简单问题的答案。我需要一种管道友好的方法来计算向量中非零元素的数量。

不带管道:

v <- c(1.1,2.2,0,0)
length(which(v != 0))
Run Code Online (Sandbox Code Playgroud)

当我尝试使用管道执行此操作时,出现错误

v %>% which(. != 0) %>% length
Error in which(., . != 0) : argument to 'which' is not logical
Run Code Online (Sandbox Code Playgroud)

dplyr 解决方案也会有所帮助

Ian*_*ell 7

以下是一些不同的选项:

首先,我们可以使用{}您的原始形式:

v %>% {which(. != 0)} %>% length
#[1] 2
Run Code Online (Sandbox Code Playgroud)

或者我们可以使用{}允许我们重复.

v %>% {.[. != 0]} %>% length
#[1] 2
Run Code Online (Sandbox Code Playgroud)

或者我们可以使用subsetBase R:

v %>% subset(. != 0) %>% length
#[1] 2
Run Code Online (Sandbox Code Playgroud)