"explorer" un objet R

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

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

"explorer" un objet R

Messagepar Stéphane Laurent » 20 Fév 2007, 08:18

Bonjour,

Je débute encore en R et je ne parviens pas à bien comprendre comment sont faits les différents objets. Tant qu'il s'agit d'utiliser une fonction, les docs sont très bien faites, je n'ai pas de problème.

Par exemple, j'utilise R2WinBUGS. Quand je lance une simulation avec la fonction bugs , celle-ci me crée un objet dit "mcmc". Il doit contenir plusieurs listes de valeurs, et j'aimerais récupérer chacune d'elles, comment faire ?

Je ne sais pas si je me fais comprendre.... :?:... mais peut-être suffisamment pour qu'on me donne une piste :wink:

Nicolas Mazziotta
Messages : 18
Enregistré le : 02 Jan 2007, 09:43

Messagepar Nicolas Mazziotta » 20 Fév 2007, 08:23

Pour les objets qui sont des listes:

Code : Tout sélectionner

>objet[]

liste toutes les valeurs contenues dans l'objet, avec leur nom.

Code : Tout sélectionner

>objet$nom

accède à la valeur dont le nom est _nom_.

Code : Tout sélectionner

>names(objet)

liste les noms
--
Nicolas Mazziotta

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 20 Fév 2007, 08:36

Merci. Voici un exemple. Mon objet se nomme "codaobject" (j'utilise le package coda). Voilà ce que ça donne :

Code : Tout sélectionner

> codaobject[]
[[1]]
Markov Chain Monte Carlo (MCMC) output:
Start = 101
End = 103
Thinning interval = 1
     v
101 12
102 12
103 12

[[2]]
Markov Chain Monte Carlo (MCMC) output:
Start = 101
End = 103
Thinning interval = 1
     v
101 12
102 24
103 32

[[3]]
Markov Chain Monte Carlo (MCMC) output:
Start = 101
End = 103
Thinning interval = 1
    v
101 4
102 4
103 3

attr(,"class")
[1] "mcmc.list"


Comment savoir si c'est une liste ou pas ? Si je fais names(codaobject) ça me répond "NULL". Comment puis-je récupérer les listes de valeurs de v ? (ici 12 12 12, 12 24 32, 4 4 3) ? Que signifient attr(,"class") et [1] "mcmc.list" ?

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 20 Fév 2007, 08:43

Toujours avec le même objet que précédemment j'ai essayé ça :

Code : Tout sélectionner

> codaobject[1,]
[[1]]
[1] 12

[[2]]
[1] 12

[[3]]
[1] 4


Moi je voudrais le vecteur (12,12,4). Je ne comprends pas les machins genre [[1]] :roll:

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 20 Fév 2007, 09:02

Ok. Voilà ce que ça donne :

Code : Tout sélectionner

> typeof(codaobject)
[1] "list"
> class(codaobject)
[1] "mcmc.list"
> mode(codaobject)
[1] "list"


Mais je ne parviens toujours pas à extraire ce que je veux de cet objet. Si je fais codaobject$nom, comme me le suggérait Nicolas Mazziotta, que puis-je mettre pour "nom" ? Ca je ne vois pas :roll:

Romain François
Messages : 42
Enregistré le : 08 Déc 2005, 19:23
Contact :

Messagepar Romain François » 20 Fév 2007, 09:20

Code : Tout sélectionner

> codaobject[1,]
[[1]]
[1] 12

[[2]]
[1] 12

[[3]]
[1] 4

Moi je voudrais le vecteur (12,12,4). Je ne comprends pas les machins genre [[1]] :roll:


Dans ce cas:

Code : Tout sélectionner

unlist( codaobject[1,] )


devrait marcher. [[1]] indique que c'est le premier element d'une liste. Introduction to R couvre largement ce type de concepts.
--
Romain François
Consultant R Indépendant
http://romainfrancois.blog.free.fr

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 20 Fév 2007, 09:43

Ok ça marche avec unlist! :D

Merci maintenant que j'ai une petite idée de comment ça marche, cela va me permettre de chercher des réponses à mes questions dans "Introduction to R" plus facilement.

Merci à vous tous! 8)

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

Messagepar Renaud Lancelot » 20 Fév 2007, 13:53

La fonction clé pour comprendre la strcuture d'un objet est str:

Code : Tout sélectionner

> x <- 1:10
> y <- rnorm(10)
> m <- lm(y ~ x)
> str(m)
List of 12
 $ coefficients : Named num [1:2]  0.700 -0.154
  ..- attr(*, "names")= chr [1:2] "(Intercept)" "x"
 $ residuals    : Named num [1:10]  0.627 -0.443  0.291 -0.667 -1.197 ...
  ..- attr(*, "names")= chr [1:10] "1" "2" "3" "4" ...
 $ effects      : Named num [1:10]  0.473 -1.403  0.213 -0.796 -1.377 ...
  ..- attr(*, "names")= chr [1:10] "(Intercept)" "x" "" "" ...
 $ rank         : int 2
 $ fitted.values: Named num [1:10]  0.5453  0.3909  0.2365  0.0820 -0.0724 ...
  ..- attr(*, "names")= chr [1:10] "1" "2" "3" "4" ...
 $ assign       : int [1:2] 0 1
 $ qr           :List of 5
  ..$ qr   : num [1:10, 1:2] -3.162  0.316  0.316  0.316  0.316 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:10] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:2] "(Intercept)" "x"
  .. ..- attr(*, "assign")= int [1:2] 0 1
  ..$ qraux: num [1:2] 1.32 1.27
  ..$ pivot: int [1:2] 1 2
  ..$ tol  : num 1e-07
  ..$ rank : int 2
  ..- attr(*, "class")= chr "qr"
 $ df.residual  : int 8
 $ xlevels      : list()
 $ call         : language lm(formula = y ~ x)
 $ terms        :Classes 'terms', 'formula' length 3 y ~ x
  .. ..- attr(*, "variables")= language list(y, x)
  .. ..- attr(*, "factors")= int [1:2, 1] 0 1
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ : chr [1:2] "y" "x"
  .. .. .. ..$ : chr "x"
  .. ..- attr(*, "term.labels")= chr "x"
  .. ..- attr(*, "order")= int 1
  .. ..- attr(*, "intercept")= int 1
  .. ..- attr(*, "response")= int 1
  .. ..- attr(*, ".Environment")=length 6 <environment>
  .. ..- attr(*, "predvars")= language list(y, x)
  .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
  .. .. ..- attr(*, "names")= chr [1:2] "y" "x"
 $ model        :'data.frame':  10 obs. of  2 variables:
  ..$ y: num [1:10]  1.1725 -0.0519  0.5270 -0.5848 -1.2691 ...
  ..$ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
  ..- attr(*, "terms")=Classes 'terms', 'formula' length 3 y ~ x
  .. .. ..- attr(*, "variables")= language list(y, x)
  .. .. ..- attr(*, "factors")= int [1:2, 1] 0 1
  .. .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. .. ..$ : chr [1:2] "y" "x"
  .. .. .. .. ..$ : chr "x"
  .. .. ..- attr(*, "term.labels")= chr "x"
  .. .. ..- attr(*, "order")= int 1
  .. .. ..- attr(*, "intercept")= int 1
  .. .. ..- attr(*, "response")= int 1
  .. .. ..- attr(*, ".Environment")=length 6 <environment>
  .. .. ..- attr(*, "predvars")= language list(y, x)
  .. .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
  .. .. .. ..- attr(*, "names")= chr [1:2] "y" "x"
 - attr(*, "class")= chr "lm"


Renaud

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 22 Fév 2007, 08:32

Re,

En fait je me suis trompé l'autre fois, c'est avec codaobject[[1]] que j'ai pu récupérer le vecteur qui m'intéressait. Néanmoins j'ai encore des soucis pour comprendre. Voilà ce que donne str (mais ce n'est pas le même objet que l'autre fois, même nature mais pas même contenu) :

Code : Tout sélectionner

str(codaobject)
List of 3
 $ : mcmc [1:9, 1:2] 109 108 108 108 108 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:9] "2" "3" "4" "5" ...
  .. ..$ : chr [1:2] "deviance" "theta"
  ..- attr(*, "mcpar")= num [1:3] 2 10 1
  ..- attr(*, "class")= chr "mcmc"
 $ : mcmc [1:9, 1:2] 108 108 108 109 108 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:9] "2" "3" "4" "5" ...
  .. ..$ : chr [1:2] "deviance" "theta"
  ..- attr(*, "mcpar")= num [1:3] 2 10 1
  ..- attr(*, "class")= chr "mcmc"
 $ : mcmc [1:9, 1:2] 108 108 108 108 108 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:9] "2" "3" "4" "5" ...
  .. ..$ : chr [1:2] "deviance" "theta"
  ..- attr(*, "mcpar")= num [1:3] 2 10 1
  ..- attr(*, "class")= chr "mcmc"
 - attr(*, "class")= chr "mcmc.list"


Par exemple :

Code : Tout sélectionner

> codaobject[[1]]
Markov Chain Monte Carlo (MCMC) output:
Start = 2
End = 10
Thinning interval = 1
   deviance  theta
2     108.8 0.1907
3     108.0 0.2143
4     107.9 0.2279
5     107.9 0.2299
6     107.9 0.2285
7     112.7 0.3303
8     107.9 0.2309
9     108.2 0.2046
10    108.0 0.2432


et :

Code : Tout sélectionner

> str(codaobject[[1]])
 mcmc [1:9, 1:2] 109 108 108 108 108 ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:9] "2" "3" "4" "5" ...
  ..$ : chr [1:2] "deviance" "theta"
 - attr(*, "mcpar")= num [1:3] 2 10 1
 - attr(*, "class")= chr "mcmc"


Pour récupérer le vecteur de la colonne "theta" dans codaobject[[1]] je fais :

Code : Tout sélectionner

> codaobject[[1]][,1]
Markov Chain Monte Carlo (MCMC) output:
Start = 2
End = 10
Thinning interval = 1
    2     3     4     5     6     7     8     9    10
108.8 108.0 107.9 107.9 107.9 112.7 107.9 108.2 108.0


Et là en effet je peux récupérer le coefficient que je veux comme si c'était la colonne theta :

Code : Tout sélectionner

> v<-codaobject[[1]][,1]
> v[3]
    4
107.9


Mais v n'est pas vraiment le vecteur (108.8 108.0 107.9 107.9 107.9 112.7 107.9 108.2 108.0), il y a des informations en plus dans v. Je le vois bien si je fais plot(v) par exemple, j'obtiens des graphiques relatifs au package coda. Comment avoir le vecteur uniquement ? À la main on peut faire comme ça :

Code : Tout sélectionner

l<-length(v)
w<-rep(0,l)
for(i in 1:l){
      w[i]<-v[i]
}


Le vecteur w obtenu est celui que je désire. Mais comment l'obtenir plus directement ?

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

Messagepar Logez Maxime » 22 Fév 2007, 09:41

Bonjour,


Ton problème ici c'est que à v sont associés des attributs.
il y a des informations en plus dans v
Je pense que tu peux solutionner ton problème en rendant les attributes de v NULL :

Code : Tout sélectionner

attributes(v) <- NULL
# désolé pour le "e"
La je pense que v ne sera que le vecteur que tu attends.

Maxime

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 22 Fév 2007, 12:23

Ouaip ça marche, sauf que c'est attributes (avec un e).

Merci 8)


Retourner vers « Questions en cours »

Qui est en ligne

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

cron