Traiter avec la valeur TRUE, FALSE NA et NaN

Ici est un vecteur

a <- c(TRUE, FALSE, FALSE, NA, FALSE, TRUE, NA, FALSE, TRUE)

Je voudrais une simple fonction qui renvoie TRUE chaque fois qu'il y a TRUE en "une", et FALSE chaque fois qu'il y a FALSE ou un NA, "un".

Les trois choses suivantes ne fonctionnent pas

a == TRUE
identical(TRUE, a)
isTRUE(a)

Voici une solution

a[-which(is.na(a))]

mais il ne semble pas être une solution simple et efficace

Est-il une autre solution ?

Voici quelques fonctions (et les opérateurs) je sais:

identical()
isTRUE()
is.na()
na.rm()
&
|
!
  • Quelles sont les autres fonctions (opérateurs, des conseils, que ce soit,...) qui sont
    utile de traiter avec TRUE, FALSE, NA, NaN?

  • Quelles sont les différences entre NA et NaN?

  • Existe-il d'autres "logique des choses" que TRUE, FALSE, NA et NaN?

Merci beaucoup !

  • Pour répondre à votre première question, en voici une: Vectorize(isTRUE)(a).
  • plus de justesse, je pense que !is.na(x) & x devrait fonctionner, aussi longtemps que les valeurs que vous êtes enceinte sont certainement contenue dans {TRUE, FALSE, NA, NaN} ...
  • Nice solutions !
  • J'ai envie de certains de ces distinctions (NA vs NaN, isTRUE vs is.na, etc.) doit avoir été discuté ailleurs, auparavant, peut-être même sur StackOverflow. Googler "na nan est.le fini est.nan est.na" me stat.ethz.ch/R-manual/R-devel/library/base/html/is.finite.html , qui curieusement n'a pas un "Voir aussi" à stat.ethz.ch/R-manual/R-devel/library/base/html/NA.html
  • pour être complet, j'ajouterai all.equal, is.finite, et is.nan à votre liste ci-dessus ...
  • NaN est numérique donc vous ne pouvez pas rencontrer dans une logique de vecteur. La solution proposée a[-which(is.na(a))] a seulement 7 éléments alors que a a 9 éléments. Êtes-vous sûr que c'est ce que vous voulez? Peut-être sapply(a, isTRUE) est ce que vous voulez?
  • Juste un rapide, tangentielle commentaire concernant la dernière partie de la question: "existe-t-il d'autres "logique des choses" que de T,F,NA, NaN?" -- T et F sont pas, en général, égale à TRUE et FALSE; c'est à dire, ils ne sont pas des mots réservés et peuvent à tout moment être redéfini par l'utilisateur. Cela signifie que vous devez être prudent de les traiter en tant que tel; par exemple, T <- FALSE peut vraiment ruiner votre journée.

InformationsquelleAutor Remi.b | 2013-05-29