Indice de noms

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

Etienne Goudal
Messages : 46
Enregistré le : 15 Jan 2009, 16:08

Indice de noms

Messagepar Etienne Goudal » 23 Jan 2009, 11:25

Bonjour

J'ai le problème suivant : j'ai besoin de tracer des données et des coefficients de corrélation (et ensuite éventuellement des covariances croisées adaptées) à partir de données dont je dispose pour les 21 régions de la France métropolitaine. Ayant a répéter la manipulation plusieurs fois, je souhaite la faire de façon "automatique", à l'aide d'une boucle for.

Le problème est le suivant : je dispose d'un vecteur de caractère qui contient le nom des régions, et de variables numériques ou sous forme de data.frame qui contiennent mes données, ces variables ayant des noms qui reprennent ceux des régions (par exemple Alsace, T_Alsace, etc...). Par conséquent, j'ai tenté de faire une boucle comme suit :

Code : Tout sélectionner

for (i in 1:21){
for (j in 1:25){
assign(paste("cor",Regions[i],sep="_"),cor(as.name(paste("T",Regions[i],sep="_"))[(243+365):(6813),1], as.name(Regions[i])[(118+365+j):(6813-243+118+j)]), env=.GlobalEnv)}
}


Le problème c'est qu'il ne reconnaît pas l'expression as.name(paste("T",Regions[i],sep="_") comme faisant référence à la variable T_Alsace (pour Regions[1] par exemple). Il n'arrive donc pas à retrouver les indices dont j'ai besoin ! Quelqu'un aurait-il déjà rencontré ce problème, et trouvé une solution ?

Merci d'avance

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

Messagepar Renaud Lancelot » 23 Jan 2009, 12:53

Une approche possible

Code : Tout sélectionner

> v <- c("a", "b", "c")
> dfr <- data.frame(a = rnorm(10), b = rnorm(10), c = rnorm(10))
> for(i in 1:2)
+   print(with(dfr, cor(get(v[i]), get(v[i+1]))))
[1] 0.2892274
[1] -0.3766607


Renaud

Etienne Goudal
Messages : 46
Enregistré le : 15 Jan 2009, 16:08

Messagepar Etienne Goudal » 23 Jan 2009, 14:49

Ah merci bien, c'était la fonction get qu'il me manquait (je ne savais pas qu'elle existait) !

Je mettrai une copie de mon code une fois terminé ci dessous, pour exemple !

edit : voilà ce que ça donne...il y a sûrement plus simple, mais pour le moment je n'ai pas trop de problèmes de complexité !

Code : Tout sélectionner

for(i in 1:21){
x <- numeric()
assign("x",get(paste("T",Regions[i],sep="_"), envir=.GlobalEnv)[,1])
y <- numeric()
for (k in 1:6813)
y[k] <- x[4*k-1]
z <- numeric()
for (j in 1:25){
z[j] <- cor(y[(244+365):(6813)], get(Regions[i],envir=.GlobalEnv)[(119+365+j):(6813-243+118+j)])
assign(paste("cor",Regions[i],sep="_"),z, env=.GlobalEnv)
}}


Merci encore pour votre aide !


Retourner vers « Questions en cours »

Qui est en ligne

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

cron