2017-07-07 5 views
0

Lorsque j'exécute 0/0 dans R, j'obtiens un NaN comme sortie. Mais est-il possible que je puisse imprimer 0/0 en tant que 1? Je sais que je pourrais utiliser quelques instructions if pour y parvenir. J'aimerais savoir s'il existe un autre moyen d'y parvenir.Force R pour imprimer 0/0 sous la forme 1

+1

Pouvez-vous simplement remplacer vos 'NaN's par' 1'? 'x [est.nan (x)] <- 1'? – Phil

+1

Voir les réponses à cette question, https://stackoverflow.com/questions/8022979/operator-overloading-and-class-definition-in-r-use-a-different-base-field-corpu Décrit comment surcharger opérations mathématiques. – Suren

+0

Une option plus simple serait de définir une fonction, disons 'div', et de l'utiliser pour la division. – Suren

Répondre

3

Vous pouvez définir votre propre symbole de division en particulier pour cela. Par exemple,

'|' <- function(a,b)ifelse(a==0 & b==0, 1, a/b) 

> 0|0 
[1] 1 
> 3|4 
[1] 0.75 
+0

Si vous préférez un nom plus parlant, vous pouvez définir un opérateur entouré de '%', comme dans '% div%'. Si l'efficacité est une préoccupation, je recommanderais '% div% <- fonction (a, b) {x <- a/b; x [est.nan (x)] <- 1; x} '(mais l'amélioration de l'efficacité est très faible) – Benjamin

0

Autre moyen que d'utiliser la déclaration If serait

# Assign NaN to vector 
a <- 0/0 
# If is NaN assign value 1 
a[is.nan(a)] <- 1