[Résolu] Bug de selection

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Jean-Emmanuel Longueville
Messages : 310
Enregistré le : 23 Fév 2011, 08:03

[Résolu] Bug de selection

Messagepar Jean-Emmanuel Longueville » 21 Oct 2020, 15:12

Bonjour,
J'ai deux vecteur : Un d'indice et un de valeurs. je cherche à faire une nouvelle colonne dans un data.table avec les valeurs de shock_value selon ma colonne indic

Code : Tout sélectionner

indic
 [1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8
> shock_value
 [1]  0  5  6  7  8  9 10 12 13 15 18 20 23 27 31 35 41 47 54 62 71

> shock_value[indic]
 [1]  0  0  0  0  5  5  6  6  7  7  9  9  9  9 10
 


Pourquoi ai je 4 0 au début au lieu de deux 0 puis deux 5 ?
Jean-Emmanuel
Ingénieur d'étude LNEC

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: Bug de selection

Messagepar Eric Wajnberg » 21 Oct 2020, 15:18

pas chez moi :

Code : Tout sélectionner

> indic
 [1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8
> shock_value
 [1]  0  5  6  7  8  9 10 12 13 15 18 20 23 27 31 35 41 47 54 62 71
> shock_value[indic]
 [1]  0  0  5  5  6  6  7  7  8  8  9  9 10 10 12

Je soupçonne que vous argumentez d'autres vecteurs que ceux que vous croyez argumenter..

HTH, Eric.

Jean-Emmanuel Longueville
Messages : 310
Enregistré le : 23 Fév 2011, 08:03

Re: Bug de selection

Messagepar Jean-Emmanuel Longueville » 21 Oct 2020, 15:24

Voici le dput de mes vecteurs :

Code : Tout sélectionner

dput(indic)
c(1, 1, 1.99999999999909, 1.99999999999909, 2.99999999999818,
2.99999999999818, 3.99999999999727, 3.99999999999727, 4.99999999999636,
4.99999999999636, 6.00000000001819, 6.00000000001819, 6.99999999994907,
6.99999999994907, 7.9999999999709)

dput(shock_value)
c(0, 5, 6, 7, 8, 9, 10, 12, 13, 15, 18, 20, 23, 27, 31, 35, 41,
47, 54, 62, 71)


Serais ce une question d'arrondi pas fait pour une selection ?
Jean-Emmanuel
Ingénieur d'étude LNEC

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: Bug de selection

Messagepar Eric Wajnberg » 21 Oct 2020, 15:28

Oui, seule la partie entière des valeurs est prise comme indice :

Code : Tout sélectionner

> shock_value
 [1]  0  5  6  7  8  9 10 12 13 15 18 20 23 27 31 35 41 47 54 62 71
> shock_value[1]
[1] 0
> shock_value[2]
[1] 5
> shock_value[1.9999]
[1] 0

C'est l'explication de votre problème.

Eric.

Jean-Emmanuel Longueville
Messages : 310
Enregistré le : 23 Fév 2011, 08:03

Re: [Résolu] Bug de selection

Messagepar Jean-Emmanuel Longueville » 21 Oct 2020, 15:48

Merci beaucoup
Assez tordu comme comportement de la part de R surtout quand un print affiche un arrondi et non la valeur enregistrée.
Seul le dput m'a mis sur la voie.
Jean-Emmanuel
Ingénieur d'étude LNEC

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: [Résolu] Bug de selection

Messagepar Eric Wajnberg » 21 Oct 2020, 16:01

Moi je trouve ceci au contraire assez logique.

Vous avez toujours la ressource - dans votre cas - de vous en sortir comme ça :

Code : Tout sélectionner

> shock_value[round(indic)]
 [1]  0  0  5  5  6  6  7  7  8  8  9  9 10 10 12

HTH, Eric.

Jean-Emmanuel Longueville
Messages : 310
Enregistré le : 23 Fév 2011, 08:03

Re: [Résolu] Bug de selection

Messagepar Jean-Emmanuel Longueville » 21 Oct 2020, 16:37

Oui c'est ce que j'ai fait je partais de base logique que ce qui était utilisé est ce qui est affiché.
Que la règle soit identique dans les deux cas.
Jean-Emmanuel
Ingénieur d'étude LNEC

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: [Résolu] Bug de selection

Messagepar Eric Wajnberg » 21 Oct 2020, 16:44

Il ne serait ni utile, ni pratique, que R ne fasse pas des arrondis dans les affichages. Ca serait tout bonnement illisible, par exemple dans des sorties de calculs statistiques.

Si vous voulez des détails dans les affichages, vous pouvez utiliser la fonction print() avec l'argument digits :

Code : Tout sélectionner

> indic
 [1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8
> print(indic, digits=15)
 [1] 1.00000000000000 1.00000000000000 1.99999999999909 1.99999999999909
 [5] 2.99999999999818 2.99999999999818 3.99999999999727 3.99999999999727
 [9] 4.99999999999636 4.99999999999636 6.00000000001819 6.00000000001819
[13] 6.99999999994907 6.99999999994907 7.99999999997090

Eric.

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: [Résolu] Bug de selection

Messagepar Mickael Canouil » 22 Oct 2020, 08:50

Bonjour,

ce problème n'est pas spécifique à R et porte le doux nom : "floating point error".
Ceci étant, pour éviter ce problème il suffit d'utiliser des entiers, ou de s'assurer que les indices soient des entiers et non des flottants.

Sinon, floor et ceiling sont très pratiques.

Code : Tout sélectionner

indic <- c(1, 1, 1.99999999999909, 1.99999999999909, 2.99999999999818,
2.99999999999818, 3.99999999999727, 3.99999999999727, 4.99999999999636,
4.99999999999636, 6.00000000001819, 6.00000000001819, 6.99999999994907,
6.99999999994907, 7.9999999999709)
print(floor(indic), digits = 15)
#>  [1] 1 1 1 1 2 2 3 3 4 4 6 6 6 6 7
print(ceiling(indic), digits = 15)
#>  [1] 1 1 2 2 3 3 4 4 5 5 7 7 7 7 8


Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité