Bonjour,
L'erreur vient du fait que lorsque tu fais eval(parse(text=paste("sst",i,"_3D",sep="")))[,,j] il te renvoie bien le tableau mais pas l'objet en question donc tu ne peux le modifier l'objet de cette manière. Je peux me tromper mais c'est comme si tu tapais rnorm(100) pour avoir un vecteur de 100 valeurs aléatoires selon une loi normale et que tu voulais en modifier la deuxième valeur, tu ne peux le faire que si tu as stocké ce rnorm dans un vecteur :
Code : Tout sélectionner
rnorm(100)[2]<-10 # ça n'a pas de sens car le rnorm n'est stocké nul part
Erreur dans rnorm(100)[2] <- 10 : la cible de l'assignation est un objet n'appartenant pas au langage
Il te faut a mon avis tout mettre dans la chaîne de caractère de ton eval :
Code : Tout sélectionner
eval(parse(text=paste(paste("sst",i,"_3D",sep=""),"[,,",j,"] <- subset( eval(parse(text=datName)),substr(eval(parse(text=datName))$Time,1,3)==months[",j,"]",sep="")))
# de cette manière tu te retrouves avec un truc dans le genre a évaluer : i=10, j=3 dans l'exemple
paste(paste("sst",i,"_3D",sep=""),"[,,",j,"] <- subset( eval(parse(text=datName)),substr(eval(parse(text=datName))$Time,1,3)==months[",j,"])",sep="")
[1] "sst10_3D[,,3] <- subset( eval(parse(text=datName)),substr(eval(parse(text=datName))$Time,1,3)==months[3])"
Il faut que la chaîne de caractère dans ton eval lui donne toutes les instructions, essaie et tu verras si ça marche ou non.
Code : Tout sélectionner
# un exemple plus simple :
x <- matrix(0,10,10)
ted <- rnorm(100)
i <- 10
j <- 3
eval(parse(text=paste("x")))[i,j] <- ted[i*j] # selon ton code
Erreur dans eval(parse(text = paste("x")))[i, j] <- ted[i * j] :
la cible de l'assignation est un objet n'appartenant pas au langage
paste("x[",i,",",j,"] <- ",paste("ted"),"[",i*j,"]",sep="") # la chaîne de caractère pour les instructions
[1] "x[10,3] <- ted[30]"
eval(parse(text=paste("x[",i,",",j,"] <- ",paste("ted"),"[",i*j,"]",sep="")))
x
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0 0 0.0000000 0 0 0 0 0 0 0
[2,] 0 0 0.0000000 0 0 0 0 0 0 0
[3,] 0 0 0.0000000 0 0 0 0 0 0 0
[4,] 0 0 0.0000000 0 0 0 0 0 0 0
[5,] 0 0 0.0000000 0 0 0 0 0 0 0
[6,] 0 0 0.0000000 0 0 0 0 0 0 0
[7,] 0 0 0.0000000 0 0 0 0 0 0 0
[8,] 0 0 0.0000000 0 0 0 0 0 0 0
[9,] 0 0 0.0000000 0 0 0 0 0 0 0
[10,] 0 0 -0.3004317 0 0 0 0 0 0 0
ted[30]
[1] -0.3004317
Maxime