2
votes

Comment arrondir un nombre entier en R

C'est une question très simple, mais comment arrondir un nombre de R pour ne montrer que 2 chiffres significatifs?

Par exemple 326 coups à 330 et 4999 coups à 5000

Merci


0 commentaires

3 Réponses :


6
votes

Peut-être que cela pourrait aider:

library(microbenchmark)
k <- sample(1:100000,1000000,replace=T)  
microbenchmark(
    round_ ={round(k, digits=-1)},
    signif_ ={signif(k,2)} 
)

Unit: milliseconds
    expr       min        lq      mean    median        uq      max neval
  round_  68.56366  70.22595  74.02643  71.99918  75.32761 109.5727   100
 signif_ 109.57957 111.86501 121.17458 114.13232 118.88837 495.0321   100

Et comme l'a souligné Jim O., il y a une différence entre signif () et round () . Les performances sont également différentes, car comme l'a souligné Gregor, cela pourrait ne pas être trop utile à savoir mais peut-être intéressant:

signif(4999,2)
5000

signif(326,2)
330

signif(326232,2)
330000


6 commentaires

Assez inutile de publier des benchmarks de performances en nanosecondes en arrondissant un seul nombre. Si vous voulez vous donner la peine de comparer quelque chose, faites-le au moins à une échelle où cela pourrait faire une différence. (Bien qu'il soit peu probable que l'arrondi avec l'une de ces fonctions soit un jour un goulot d'étranglement des performances.)


@Gregor Je ne voulais pas déranger personne et, si je le faisais, je voudrais excuser à qui a été dérangé (aussi, j'ai donné +1 à la réponse de Jim O., que j'ai aimé): Je voudrais seulement ajouter quelque chose que j'aime généralement faire par moi-même, en espérant que cela aide. Votre point est valable, j'ai ajouté un benchmarking -probablement- plus significatif, merci pour la suggestion.


Pas la peine! J'ai voté pour votre réponse lorsque j'ai commenté, c'est bien! Je voulais juste souligner que les repères n'étaient pas utiles tels qu'ils ont été publiés et, espérons-le, empêcher d'autres personnes de les voir comme un exemple de quelque chose qui mérite d'être fait ou considéré.


Si vous regardez en arrière, vous verrez sur le numéro de référence 1, le temps médian pour signif était de 1 ns, contre 428 pour round , ce qui signifie que signif est ~ 40000% plus rapide , un résultat absurde. Avec cet exemple plus raisonnable, nous obtenons un résultat dans la direction opposée et d'une ampleur raisonnable, round est ~ 36% plus rapide. Cependant, le fait est toujours que ces deux fonctions sont si rapides qu'il est difficile d'imaginer l'une ou l'autre constituant un goulot d'étranglement en termes de performances. En raison de cela et du fait que les fonctions font des choses (légèrement) différentes, le benchmark peut être intéressant mais je ne pense pas qu'il soit réellement utile .


J'ai vu ce que vous dites, j'espère que vos commentaires pourront rendre la réponse plus utile et laisser aux futurs lecteurs la possibilité de se faire une opinion sur: dans mon esprit, je suis avec vous, ce n'est pas utile pour ce cas.


Cool. J'ai aimé cette réponse aussi. Je n'ai même pas pensé aux différences de performances.



1
votes

essayez ceci

round(3333,-1)
round(3333,-2)

et voyez ce que vous obtenez


0 commentaires

8
votes

Utilisez des chiffres pour indiquer les décimales.

x2 <- pi * 100^(-1:3)
round(x2, 3)
signif(x2, 3)

[1]       0.031       3.142     314.159   31415.927 3141592.654
[1] 3.14e-02 3.14e+00 3.14e+02 3.14e+04 3.14e+06

Voici la différence entre signif () et round () . Tiré directement de la documentation:

round(326, digits=-1)
[1] 330

Utilisez celui qui fonctionne pour vous.


1 commentaires

C'est plutôt sympa! Je n'ai jamais su que vous pouviez utiliser des chiffres négatifs pour arrondir au-dessus du niveau «unité».