Étonnamment, je ne trouve pas de réponse à cette question facile. J'ai besoin d'un moyen convivial pour compter le nombre d'éléments non nuls dans un vecteur.

Sans tuyauterie:

v <- c(1.1,2.2,0,0)
length(which(v != 0))

Quand j'essaye de faire ça avec des tuyaux, j'obtiens une erreur

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

Une solution dplyr aiderait également

3
LucasMation 19 mai 2020 à 19:52

3 réponses

Meilleure réponse

Voici quelques options différentes:

Tout d'abord, nous pouvons utiliser {} avec votre formulaire d'origine:

v %>% {which(. != 0)} %>% length
#[1] 2

Ou nous pourrions utiliser {} pour nous permettre de répéter .:

v %>% {.[. != 0]} %>% length
#[1] 2

Ou nous pourrions utiliser subset de Base R:

v %>% subset(. != 0) %>% length
#[1] 2
4
Ian Campbell 19 mai 2020 à 17:06

Une façon d'utiliser magrittr pourrait être:

v %>%
 equals(0) %>%
 not() %>%
 sum()

[1] 2
2
tmfmnk 19 mai 2020 à 17:07

Nous pouvons convertir en tibble et filter

library(dplyr)
tibble(v) %>% 
  filter(v != 0) %>%
  nrow
#[1] 2
1
akrun 19 mai 2020 à 17:38