IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Incompatibilité entre les fonctions R de base ?


Sujet :

R

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Points : 20
    Points
    20
    Par défaut Incompatibilité entre les fonctions R de base ?
    Bonjour,

    La minuscule fonction suivante semble poser des problèmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    truc = function(b) {
    	inData = as.matrix(read.table("inputs.txt"))
    	outData = as.matrix(read.table("outputs.txt"))
     
    	if (b) {
    		s = svd(outData) ; basis = s$v[,1:3]
    		embedding = outData %*% basis
    		#write(t(embedding),"embedding.txt",ncolumns=3)
    	}
    	else embedding = as.matrix(read.table("embedding.txt"))
     
    	testInds = c(5,2,16)
    	trainInds = c(8, 4, 22, 3, 21, 11, 12, 23, 26, 27, 20, 17, 15, 24, 19, 29, 33, 18, 25, 30, 14, 9, 6, 32, 28, 10, 31, 7, 13, 1)
    	p = ppr( inData[trainInds,],embedding[trainInds,1],nterms=6 ) ; p
    }
    Résultats :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    > truc(F)
    Call:
    ppr(x = inData[trainInds, ], y = embedding[trainInds, 1], nterms = 6)
     
    Goodness of fit:
      6 terms 
    0.1178330 
     
    > truc(T)
     
     *** caught segfault ***
    address 0x41ab000, cause 'memory not mapped'
    Erreur de segmentation
    Après plusieurs heures de débuggage en obtenant ces résultats, je me dis "comment une SVD peut "perturber" la fonction ppr ?!". ça semble ridicule =/

    Note 1 : inputs.txt, outputs.txt et embedding.txt sont des matrices à 33 rangées, et respectivement 3, 200 et 3 colonnes.
    Note 2 : il y a un paquet de trucs sans intérêt dans mon .RData, dont peut-être des choses conflictuelles.. j'essaye en effaçant tout ça pour voir.
    [EDIT : c'est exactement le même bug avec .RData et .Rhistory vides ! J'y comprends rien]

    Et c'est pas fini : le bug semble dépendant de la machine ; au bureau j'obtiens le même plantage, mais pour un jeu de données légèrement différent. Youpi..

    Si vous avez une idée, merci d'avance :-)

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Parfois j'ai droit à un backtrace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    > truc(T)
     
     *** caught segfault ***
    address 0x3b61000, cause 'memory not mapped'
     
    Traceback:
     1: .Fortran(R_smart, as.integer(ml), as.integer(mu), as.integer(p),     as.integer(q), as.integer(n), as.double(weights), as.double(t(x)),     as.double(t(y)), as.double(ww), smod = double(msmod), as.integer(msmod),     double(nsp), as.integer(nsp), double(ndp), as.integer(ndp),     edf = double(ml))
     2: ppr.default(inData[trainInds, ], embedding[trainInds, 1], nterms = 6)
     3: ppr(inData[trainInds, ], embedding[trainInds, 1], nterms = 6)
     4: truc(T)
    ..mais n'ai guère envie d'aller fouiller le code Fortran :-)

    Parfois aussi c'est un bus error ..etc. Que du bonheur. même après vidage de .RData .Rhistory et reboot. J'ai également vérifié les fichiers de matrices : ils contiennent bien de bonnes vieilles matrices numériques. Très bizarre tout ça =/

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Je me sens un peu seul mais ai peut-être une piste :
    "This code is extremely sensitive to the compiler used" (dans les détails de l'aide help(ppr) ).

    D'ailleurs en utilisant les SVR (support vector regression) le code - global, pas juste l'exemple ci-dessus - ne segfault pas. Je vais finir par réimplémenter ppr() ?! =/ Enfin ça m'intéresse de le coder, mais ce sera jamais aussi rapide que le ppr Fortran codé quasi exclusivement avec des if et des goto, avec 3 lignes de commentaires pour 300 lignes de codes

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/04/2014, 16h07
  2. Problème d'incompatibilité entre 2 fonction
    Par bog333 dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 03/10/2008, 19h47
  3. lien entre les tables d'une base de données Mysql
    Par chifa dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/10/2007, 12h42
  4. Incompatibilité entre les objets
    Par bastoonet dans le forum Designer
    Réponses: 1
    Dernier message: 22/02/2007, 08h51
  5. Réponses: 8
    Dernier message: 17/05/2006, 10h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo