Probleme "numeric" et problème de contenu.

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

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Probleme "numeric" et problème de contenu.

Messagepar Thomas Galtier » 25 Mai 2007, 14:59

Bonjour j'ai exporter des données sous R avec :


Code : Tout sélectionner

data.grid<-read.table("grille.txt")



Après ça me rend ça :


Code : Tout sélectionner

1  -20.125 57.751
2  -20.125 57.769
3  -20.125 57.787
4  -20.125 57.804
5  -20.125 57.822
6  -20.125 57.840
7  -20.125 57.857
8 -20.125 57.875



lorsque je fais :

Code : Tout sélectionner

is.numeric(data.grid)


ça repond "FALSE" ...

Je ne vois pas pourquoi du tout ...

Pourtant colonne par colonne j'arrive à forcer la convertion en numeric ... mais d'un coup (en tapant as.numeric(data.grid)) non.

Or je dois appliquer dans une fonction quelque chose de numerique de cette forme mais reconnu en numerique.

Si quelqu'un pouvait m'aider

De plus, pour ma fonction, j'ai une data.frame avec LONG, LAT, TEMP et il me faut une newdata avec ces propriétés là :

"data frame or Spatial object with prediction locations; should contain attribute columns with independent variables and the coordinates with names as defined in 'locations' "

Dans 'locations' jai ma variable LONG et LAT :~LONG+LAT issu de la premiere data.frame.

Que dois-je mettre (en plus d'avoir des données numeriques que je n'obtiens pas) dans ma seconde data.frame d'après vous ? Là j'ai mis que des coordonnées ou je veux une estimation ...

Merci par avance pour tout renseignements

Thomas

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Re: Probleme "numeric" et problème de contenu.

Messagepar Renaud Lancelot » 25 Mai 2007, 15:26

Thomas Galtier a écrit :Bonjour j'ai exporter des données sous R avec :


Code : Tout sélectionner

data.grid<-read.table("grille.txt")



Après ça me rend ça :


Code : Tout sélectionner

1  -20.125 57.751
2  -20.125 57.769
3  -20.125 57.787
4  -20.125 57.804
5  -20.125 57.822
6  -20.125 57.840
7  -20.125 57.857
8 -20.125 57.875



lorsque je fais :

Code : Tout sélectionner

is.numeric(data.grid)


ça repond "FALSE" ...

Je ne vois pas pourquoi du tout ...


is.numeric est applicable à un vecteur, alors que data.grid est un data.frame. Pour tester chaque colonne d'un data.frame, utiliser par exemple la fonction lapply:

Code : Tout sélectionner

> myData <- data.frame(x = 1:5, y = as.character(10:6))
> myData
  x  y
1 1 10
2 2  9
3 3  8
4 4  7
5 5  6
> summary(myData)
       x      y   
 Min.   :1   10:1 
 1st Qu.:2   6 :1 
 Median :3   7 :1 
 Mean   :3   8 :1 
 3rd Qu.:4   9 :1 
 Max.   :5         
>
> lapply(myData, is.numeric)
$x
[1] TRUE

$y
[1] FALSE



Pourtant colonne par colonne j'arrive à forcer la convertion en numeric ... mais d'un coup (en tapant as.numeric(data.grid)) non.

Or je dois appliquer dans une fonction quelque chose de numerique de cette forme mais reconnu en numerique.

Si quelqu'un pouvait m'aider


Combiner lapply, as.data.frame (pour transformer la liste retournée par lapply en data.frame) et as.numeric avec as.character pour transformer le facteur en colonne. Il faut faire en effet attention: par défaut, les colonnes de type caractère sont transformées en facteur quand elles sont incorporées dans un data.frame. La fct as.numeric appliquée sur un facteur se base sur les niveaux des facteurs, et non leur représentation en mode caractère:

Code : Tout sélectionner

> myData <- as.data.frame(lapply(myData, as.numeric))
> myData
  x y
1 1 1
2 2 5
3 3 4
4 4 3
5 5 2


A comparer à:

Code : Tout sélectionner

> myData <- data.frame(x = 1:5, y = as.character(10:6))
> myData
  x  y
1 1 10
2 2  9
3 3  8
4 4  7
5 5  6
> myData <- as.data.frame(lapply(myData, function(x) as.numeric(as.character(x))))
> myData
  x  y
1 1 10
2 2  9
3 3  8
4 4  7
5 5  6


Renaud

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Messagepar Thomas Galtier » 25 Mai 2007, 15:28

Merci Renaud je vai tester ça (enfin l'imprimer plus precisement car pas internet chez moi ce week end et là le boulot se finit :lol: )

Sinon tu sais pas par hasard ce qu'il me demande dans la "new.data" comparativement à l'ancienne ?

Merci encore ;)

Thomas

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 25 Mai 2007, 15:29

Quelle fonction ? L'argument newdata est dans la plupart des méthodes écrites pour predict (predict.lm; predict.glm,...).

Renaud

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Messagepar Thomas Galtier » 25 Mai 2007, 15:34

Exactement mais j'arrive pas à l'interpreter ...

Ils veulent juste les emplacement ou je cherche à predire ?
Ou d'autres données ?

Sinon pour ma question sur l'autre post :

code source de la fonction : fit.variogram et aussi vgm et enfin krige ... :lol:

C'est chaud chaud chaud en ce moment ... j'ai le week end pour comprendre comment tourne ces fonctions que je fais tourner à la "main" avec des livres mais à savoir comment elles elle tournent avec R ... faut que j'en sois certain lol.

merci encore Renaud ;)

Thomas

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 25 Mai 2007, 15:47

Thomas Galtier a écrit :Exactement mais j'arrive pas à l'interpreter ...

Ils veulent juste les emplacement ou je cherche à predire ?
Ou d'autres données ?


Oui: le principe général est de donner dans newdata l'ensemble des variables présentes dans la partie droite de formule (RHS en anglais) ayant servit à constuire le modèle, mais seulement pour les valeurs présentant un intérêt particulier:

Code : Tout sélectionner

> myData <- data.frame(x = 1:10, y = 1.5 * (1:10) + rnorm(10))
> fm <- lm(y ~ x, data = myData)
> predict(fm, newdata = data.frame(x = c(1, 5, 10)))
        1         2         3
 1.211147  7.487128 15.332103


Renaud

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Messagepar Thomas Galtier » 28 Mai 2007, 09:55

Pas bien compris ton explication là Renaud ...

PS: j'ai cree un nouveau post specialement pour ce probleme ... je pense qu'il peut etre utile à beaucoup.

Encore merci à toi :wink:

Elodie Drula
Messages : 3
Enregistré le : 19 Juil 2007, 07:38

Messagepar Elodie Drula » 19 Juil 2007, 08:38

Bonjour !
alors voilà j'ai le même soucis mais je n'ai pas compris ta réponse Renaud:

je fais un read.table sur mes données qui ont cette tête :

>identifiant1;0.258;0.256;0.289.......;
>identifiant2;V1;V2;V3.......,V2048;
...
>identifiantN,V1;V2;V3.......,V2048;


essai=read.table("outpg3.fasta",header=F,sep=";",dec=",")

dc mon format de sortie est un data.frame sans header
avec la premiere colonne qui est l'identifiant
et une derniere colonne qui est une valeur NA

[aparté]
je sais pas pourquoi il me rajoute le NA :j'ai vu votre solution (sur le forum) avec le na.omit ou encore le essai[!is.na(essai)]
mais c'est surement que dans le cas du forum le type de la variable était vecteur.
[fin aparté]

donc je veux faire une transformée de FOURIER rapide : avec fft

il me faut donc comme type soit numeric soit matrix car deux facons de le faire :
fft(x)
ou mvfft(x)

mais voilà :
essai2<-as.matrix(essai[,2:2049])

mvfft(essai2[1,])
Error in mvfft(z, inverse) : vector-valued (multivariate) series required

or is.matrix(essai2)
[1] TRUE


TOUT CA POUR DIRE : que mes valeurs à chaque ligne ne sont pas des caractères j'ai essayé de remanier ta réponse avec :

essai=as.data.frame(lapply(essai, function(x) as.numeric(as.data.frame(x))))

mais ca marche pas

SOS ca fait deux jours que je bloque
MERCI
Elodie

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

Messagepar Logez Maxime » 19 Juil 2007, 09:04

Bonjour,

Pour te répondre Elodie. Le problème de ton apparté vient du dernier ";" sur la ligne, comme c'est un séparateur il attend une valeur derrière n'en trouve pas et retourne donc un NA.
Essaie ça :

Code : Tout sélectionner

essai <- read.table("outpg3.fasta",header=F,sep=";",dec=".",as.is=FALSE)
essai2 <- as.matrix(essai[,2:2048])
sapply(essai,class) #pour voir si tes colonnes 2 à 2048 sont numériques
# ou à partir de ton premier code :
essai=read.table("outpg3.fasta",header=F,sep=";",dec=",")
essai2 <- sapply(essai[,2:2048],function(x) as.numeric(as.character(x))) # directement sous forme de matrice.
# après si tu veux utiliser mvfft que sur une colonne :
mvfft(essai2[,1,drop=FALSE])
# ce qui doit être équivalent à
fft(essai2[,1])


Maxime

Elodie Drula
Messages : 3
Enregistré le : 19 Juil 2007, 07:38

Messagepar Elodie Drula » 19 Juil 2007, 09:49

MERCI
ca marche mais tu n'as rien changé sauf le as.is=FALSE dans le read.table
comment c'est possible ?
tu m'expliques ya du avoir un changement que j'ai pas vu !!

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

Messagepar Logez Maxime » 19 Juil 2007, 09:56

Re,

le as.is par défaut est FALSE donc je ne l'ai pas modifié ct juste pour attirer l'attention sur ce paramètre. Sinon ce que j'ai modifié c'est le dec="." au lieu de dec=",". Si tu lui dis que le séparateur décimal est une virgule il va traduire tes 0.258 en carcactère puisque qu'ils sont séparés par des points.

Maxime

Elodie Drula
Messages : 3
Enregistré le : 19 Juil 2007, 07:38

Messagepar Elodie Drula » 19 Juil 2007, 11:02

mais bien sur!
c'était aussi simple que ca !merci!


Retourner vers « Questions en cours »

Qui est en ligne

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