Problème avec la fonction row.match

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

Diane MANZON
Messages : 56
Enregistré le : 18 Juin 2018, 08:31

Problème avec la fonction row.match

Messagepar Diane MANZON » 25 Mar 2019, 09:49

Bonjour à tous,

Je rencontre un problème avec la fonction row.match du package prodlim.
J'ai un tableau avec des valeurs (X) et un vecteur (test) que je crée moi-même et qui correspond à la ligne 7 de X. Quand je lui demande de vérifier si la ligne appartient au tableau, il me renvoie NA….

Ci-dessous un code reproductible:

Code : Tout sélectionner

## Paramètres
r <- sqrt(2)
scale = 0.0707

## Création de la grille de points
Xg <- expand.grid(X1 = seq(-r,r,scale), X2=seq(-r,r,scale))
Xg <- as.matrix(Xg)
sphere <- sqrt(Xg[,1]^2+Xg[,2]^2)
Xg2 <- cbind(Xg, sphere)
Xg3 <- Xg2[Xg2[,3]<=r+0.001,]
X <- Xg3[,-3]
rm(Xg,Xg2,Xg3)
X <- X[-1,]
X <- X[-1256,]
X <- X[-608,]
X <- X[-647,]
X <- as.matrix(X)

test <- matrix(c(-0.00021356237, -1.3435156), ncol=2, nrow=1, byrow=FALSE) #je crée volontairement une matrice avec les valeurs de la ligne 7
library(prodlim)
row.match(test[1,], X) #il me renvoie NA ....



J'ai testé avec d'autres points, il n'y a que pour la ligne 7 et 8 de X que la fonction row.match me renvoie NA…

Pouvez-vous m'aider ?
Merci beaucoup!

Diane

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

Re: Problème avec la fonction row.match

Messagepar Mickael Canouil » 25 Mar 2019, 09:58

Bonjour,

votre test n'est pas identique à la ligne 7, donc vous ne pouvez pas trouver test dans votre table X:

Code : Tout sélectionner

as.vector(X[7, ])
#> [1] -0.0002135624 -1.3435135624
c(-0.00021356237, -1.3435156)
#> [1] -0.0002135624 -1.3435156000

prodlim::row.match(as.vector(X[7, ]), X)
#> [1] 7
Mickaël
mickael.canouil.fr | rlille.fr

Diane MANZON
Messages : 56
Enregistré le : 18 Juin 2018, 08:31

Re: Problème avec la fonction row.match

Messagepar Diane MANZON » 25 Mar 2019, 10:10

Bonjour Mickael,

Merci pour votre rapidité.
Cependant, je ne comprends pas. C'est parce que mon test est sous forme de "matrice" ?
J'ai crée des matrices similaires pour les autres points, et je les retrouve bien avec la fonction row.match
Si c'est pour l'arrondi, j'ai essayé d'avoir le même nombre de chiffres après la virgule, pour test et pour X, et ça ne change rien….

Merci pour votre retour,

Diane

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Problème avec la fonction row.match

Messagepar Logez Maxime » 26 Mar 2019, 10:31

Bonjour,

ce n'est pas un problème d'objets. Tout simplement test[1,] n'est pas compris dans X et quand c'est le cas par défaut la fonction row.match renvoie un NA (voir l'argument nomatch).
Si tu fais :

Code : Tout sélectionner

X[abs(X[,1]-test[1,1])<1e-7,]
                 X1            X2
 [1,] -0.0002135624 -1.3435135624
 [2,] -0.0002135624 -1.2728135624
 [3,] -0.0002135624 -1.2021135624
 [4,] -0.0002135624 -1.1314135624
 # ...
Tu vois que les valeurs de test[1,] ne sont pas dedans. La deuxième valeur vaut -1.34351560 et on ne la retrouve pas ici.

Cordialement,
Maxime


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité