Suite à notre script R nous obtenons le message d'erreur suivant :
Code : Tout sélectionner
Error in plot.window(...) : valeurs finies requises pour 'ylim'
Notre script :
Code : Tout sélectionner
getwd()
setwd('P:/Priv/Arnaud/ACM_stageM2EE/Manips/manip1/results/Interaction_plots')
windowsFonts(A=windowsFont("Calibri"))
vec = c("Ma", "Mb", "Mm", "Ta", "Td", "Tg", "Tl", "Ai")
for(i in 1:length(vec)) {
for(j in 0:length(vec)) {
tiff(paste("./FIGURE_interaction_plot_", vec[i] , vec[i+j] , ".tiff" , sep=""), res=300, width=7, height=15, unit="in", compression="lzw")
m = matrix(1:4, 2, 2)
layout(m, widths=c(3,10), heights=c(10,1.5))
layout.show(4)
par(mar=c(0,0,0,0), ps=8)
plot(0, 0, xlim=c(0,0.1), ylim=c(0,1), type="n", axes=FALSE, frame.plot=FALSE)
text(0.03, 0.5, paste("aboveground biomass - A. thaliana (mg)", sep=""), srt=90, cex=4.5, family="A", font= 2)
par(mar=c(0,0,0,0), ps=8)
plot(0, 0, xlim=c(0,0.1), ylim=c(0,1), type="n", axes=FALSE, frame.plot=FALSE)
setwd('P:/Priv/Arnaud/ACM_stageM2EE/Manips/manip1/datas')
data = read.table("interaction_plot.txt", dec=".", na.strings=".", header=TRUE)
setwd('P:/Priv/Arnaud/ACM_stageM2EE/Manips/manip1/results/Interaction_plots')
data = data[data$treatment==vec[i] | data$treatment==vec[i+j],]
data$color = "black"
colnames(data) = c("accession","position","treatment","BLUP","color")
plot(0, 0, xlim=c(0.9,2.2), ylim=c(min(data$BLUP)-0.1*min(data$BLUP), max(data$BLUP)+0.1*max(data$BLUP)), axes=F, xlab="", ylab="Disease index", type="n", frame.plot=F, cex.main=1, cex.lab=1)
axis(side=2, cex.axis=4.5)
axis(1, at=c(1:2), labels = c(vec[i],vec[i+j]), cex.axis=4.5, font = 2, mgp=c(4,3,0))
number=0
for (ind in sort(levels(data$accession))) {
number=number+1
Z=data[data$accession==ind,]
point1=Z[Z$treatment==vec[i],4]
point2=Z[Z$treatment==vec[i+j],4]
vectpoint=c(point1, point2)
if (!any(is.na(vectpoint)==TRUE)) {
lines(x= c(1:2), y = vectpoint, type="b", col=data$color[data$accession==ind][1], cex=1)
}
}
dev.off()
}
}
Ce que nous cherchons à faire :
Nous voulons faire une trentaine d'interaction plots (d'où les boucles en début de script) en les enregistrant directement dans des fichiers au format TIFF. Nous avons un jeu de données avec 8 sous-jeux de données ("Ma", "Mb", "Mm", "Ta", "Td", "Tg", "Tl", "Ai"), et nous voulons faire des interaction plots entre chacun de ces 8 sous-jeux de données (Ma avec Mb, Ma avec Mm, Ma avec Ta,.......Tl avec Ai).
Quand nous lançons le script, on voit en direct les fichiers TIFF se faire correctement mais seulement pour les MAXx (MaMb, MaMm, MaTa, MaTg, MaTd, MaTl). Une fois que tout les MAXx sont faits, le script se stop avec le message d'erreur indiqué.
L'erreur semble provenir des valeurs de ylim du plot. Pour adapter la taille du plot à nos données, nous ne mettons pas des valeurs fixes mais des valeurs dépendantes des minima et maxima de nos données : ylim=c(min(data$BLUP)-0.1*min(data$BLUP), max(data$BLUP)+0.1*max(data$BLUP)).
Ce que nous ne comprenons pas, c'est pourquoi le script marche pour la première valeur de [i] (à savoir Ma) mais que ça ne marche plus pour les autres ?
Si nous choisissons 5 et 20 respectiment en limites mini et maxi, le script marchera correctement du début jusqu'à la fin, mais comme expliqué plus haut, nous voudrions que les limites min et max varient avec les sous-jeu de données utilisées.
Nous avons une seconde question, plus minime mais temps qu'on y est pourquoi pas :
ce script nous permet de faire toutes les combinaisons d'interaction plot entre "Ma", "Mb", "Mm", "Ta", "Td", "Tg", "Tl", "Ai". Certaines combinaisons sont inutiles : MaMa, MbMb, MmMm, TaTa, TdTd, TgTg, TlTl, et AiAi. Aussi, ce script crée des fichiers TIFF pour MaNA, MbNA, MmNA, TaNA, TdNA, TgNA, TlNA, et AiNA, qui ne donnent rien, d'où sortent ces NA ? Notre seconde question très minime est donc : pouvons-nous optimiser notre script pour ne pas avoir ni les combinaisons inutiles ni les combinaisons avec NA ?
Merci d'avance pour votre aide.