Bonjour A.D., 
Merci pour votre rappel sur les "balises codes", j'avais complétement oublié !
Pour le détail de mon objet mpcross :
1) J'ai un fichier avec les marqueurs snp de mes 4 parents - Je l'appelle "founders" (parents fondateurs) Les noms sont en lignes, les marqueurs en colonne :
1 2 3 4 5 6 7 8 9
| fou <- read.table('Numeric_Founders.csv', sep=";", h=T, row.names=1)
#Transpose
founders <- t(fou)
> founders[1:4,1:4]
D1M1 D1M2 D1M3 D1M4
A 0 0 1 0
B 1 1 0 1
C 0 1 0 0
D 0 0 1 0 |
1 2
| > dim(founders)
[1] 4 623 |
2) Un fichier avec les marqueurs snp de mes 275 descendants - Je l'appelle "finals". Les noms des individus sont en lignes, les marqueurs en colonne :
1 2 3 4 5 6 7 8 9 10
| fin <- read.table('Numeric_Finals.csv', sep=";", h=T, row.names=1)
#Transpose
finals <- t(fin)
> finals[1:5,1:5]
D1M2 D1M3 D1M4 D1M5 D1M6
L1 1 0 0 1 0
L2 1 0 0 1 0
L3 0 0 0 0 0
L4 1 0 0 1 0
L6 0 0 0 0 1 |
1 2
| > dim(finals)
[1] 275 623 |
3) La carte génétique, cad la position de chacun de mes marqueurs sur leur chromosomes respectifs :
1 2 3 4 5 6 7 8 9 10 11 12 13
| #Map
map <- read.table("MAP.csv", sep=";", h=T)
map[1:5,1:3]
#Restructuration
map1 <- list()
for (i in unique(map[,2])) {
map1[[i]] <- map[which(map[,2]==i), 3]
names(map1[[i]]) <- map[which(map[,2]==i), 1]
}
class(map1) <- "map"
map1
> length(map1)
[1] 10 |
4) Un fichier pedigree, qui indique le plan de croisement (qui on a croisé avec qui et combien d'autofécondation). Comme mon schéma de croisement est dit classique, j'indique que mon pedigree est le même que celui simulé par les données pour un croisement 4 parents :
1 2 3
| ped<-sim.mpped(4,1,275,6,1)
> dim(ped)
[1] 1931 4 |
Maintenant j'ai les bases pour créer mon object de classe mpcross, qui va me regrouper ou concaténer toutes ces données (c'est bien celà qu'il fait ?) :
mpc <- mpcross(finals=finals, founders=founders, pedigree=ped, fid=fid, id=id)
Note : "Fid" est juste la liste des quatre noms pour les founders (soit A, B, C et D) et "id" la liste des noms des 275 lignées (L1, L2, L3...)
Je rajoute à cet objet :
==> Un fichier phéno, qui correspond à la notation d'un caractère en champ, par exemple "hauteur de la plante". Une mesure est donnée à chaque lignée descendante :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #Add Pheno
phein=read.table('pheno.csv', sep=";", header=TRUE)
head(phein)
rownames(phein)=phein$names
phein$names=NULL
head(phein)
m <- match(rownames(mpc$finals), rownames(phein))
if (sum(is.na(m)) > 0)
cat("Lines in finals data which are not in phenotypes")
if (length(m) < nrow(phein))
cat("Lines in phenotypes which are not in finals data")
m <- m[!is.na(m)]
pheno <- phein[m, ]
mpc$pheno <- as.data.frame(pheno)
rownames(mpc$pheno) <- rownames(phein) |
1 2 3 4 5 6 7 8
| > head(mpc$pheno)
pheno
L1 4
L2 -2
L3 0
L4 -4
L6 -4
L7 -2 |
1 2
| > dim(mpc$pheno)
[1] 275 1 |
==> et je rajoute la carte génétique :
1 2 3
| #Add map
mpc$map <- map1
mpc |
Ce qui est étrange c'est que sur certaines fonctions, comme summary(mpc), que j'appelle par la suite pour vérifier mes données, il lit très bien l'objet. Mais lorsque je souhaite l'exporter ou aller plus loin, notamment avec le calcul des probabilités par mpprob() il me sort l'erreur :
1 2 3 4
| > mppr<-mpprob(mpc,program="qtl")
[1] "No chromosomes specified, will default to all"
Error in names(vec) <- colnames(ril) :
'names' attribute [625] must be the same length as the vector [2] |
Je soupçonne le choix du programme "qtl" d'y être pour quelque chose, car en utilisant l'argument "happy" pour l'exportation des données, cela semble marcher :
1 2 3 4 5
| > #Test
> write.mpcross(mpc, filestem="mp", format="qtl")
Error in names(vec) <- colnames(ril) :
'names' attribute [625] must be the same length as the vector [2]
> write.mpcross(mpc, filestem="mp", format="happy") |
Cependant, je n'ai pas le choix, il me faut utiliser l'argument "qtl" qui est beaucoup plus adapté que "happy" (de plus pour aller plus loin avec happy, j'ai un probème de version avec le package happy.hbrem qui n'est pas à jour)
Le but ultime de mon analyse est vraiment d'utiliser la fonction "mpprob()", il semble que je sois proche d'y arriver, mais un petit truc coince. Si vous avez la moindre idée n'hésitez pas.
J'espère avoir été claire dans le détail de l'objet et du code, si ce n'est pas le cas faites le moi savoir 
Merci pour vos réponses !
Partager