[R] Problem with save or/and if (I think but maybe not ...)

Prof Brian Ripley ripley at stats.ox.ac.uk
Mon Aug 27 11:02:10 CEST 2007


On Mon, 27 Aug 2007, Ptit_Bleu wrote:

>
> Hi,
>
> I recently discovered the R program and I thought it could be useful to me.
> I have to analyse data saved as .Px file (x between 0 and 8 - .P0 files have
> 18 lines at the beginning that I have to skip). New files are generated
> everyday.

     relrfichiers<-dir(chemin, pattern=".P")

does not do that, though.  Better to use

     dir(chemin, pattern="\\.[0-8]$", full.names=TRUE)

or

     Sys.glob(file.path(chemin, "*.P[0-8]"))


> This is my strategy :
>
> In order to analyse the data, I first want to copy the new data in a
> database in MySQL (which already contains the previous data).
> So the first task is to compare the list of the files in the directory
> (object : rfichiers) to the list of the files already saved (object :
> tfichiers). The list containing the new files is then given by
> nfichiers<-setdiff(rfichiers, tfichiers).
>
> It sounds easy ...
> ... but it doesn't work !!!
>
> Up to now, I'm am able to connect to MySQL and, if the file "tfichiers.r"
> doesn't exist, I can copy data files to the MySQL database.
> But if "tfichiers.r" already exists and there is no new file to save, it
> ignores the condition if (nfichiers!="0") and save all the files of the
> directory to the database.

What did you intend there?  It is not a test of no difference, but a test 
that each element of the difference is not "0", and furthermore if() 
expects a test of length one, not the length of nfichiers.  I suspect you 
intended to test length(nfichiers) > 0.

It often helps to print (or use str on) the objects you create.  Try this 
on

     nfichiers
     nfichiers!="0"

> Is it a problem with the way I save tfichiers or is it a problem with the
> condition if (nfichiers!="0") ?

Saving in R save format with extension .r is going to confuse others. 
Extension .rda is conventional for save format (and I doubt you need an 
ascii save).

> Could you please give me some advices to correct my script (written with
> Tinn-R) ?
>
> I thank you in advance for your help.
> Have a nice week,
> Ptit Bleu.
>
> PS : Ptit Bleu means something like "Full Newbye" in french. So thanks to be
> patient :-)
> PPS : I hope you understand my french english
>
> ------------------------------------------
>
>
> # Connexion a la base de donnees database de MySQL
>
> library(DBI)
> library(RMySQL)
> drv<-dbDriver("MySQL")
> con<-dbConnect(drv, username="user", password="password", dbname="database",
> host="localhost")
>
>
> # Creation des objets contenant la liste des fichiers (rel pour chemin
> relatif)
> # - dans le repertoire : objet rfichiers
> # - deja traites : objet tfichiers
> # - nouveaux depuis la derniere connexion : objet nfichiers
> # chemin est le repertoire de stockage des donnees
> # RWork est le repertoire de travail de R
> # sep='' pour eviter l'ajout d'un espace apres Mydata/
>
> setwd("D:/RWork")
> chemin<-"d:/Mydata/"
> relrfichiers<-dir(chemin, pattern=".P")
> rfichiers<-paste(chemin,relrfichiers, sep='')
> if (file.exists("tfichiers.r"))
>  {
>    tfichiers<-load("tfichiers.r")
>    nfichiers<-setdiff(rfichiers,tfichiers)
>  } else {
>    nfichiers<-rfichiers
>  }
>
>
> # p0fichiers : fichiers avec l'extension .P0 (fichiers contenant des lignes
> d'infos à ne pas charger)
> # pxfichiers : fichiers avec les extensions P1, ..., P8 (sans infos au
> debut)
>
> if (nfichiers!="0")
> {
>  p0fichiers<-nfichiers[grep(".P0", nfichiers)]
>  pxfichiers<-setdiff(nfichiers, p0fichiers)
>
>
> # Fusion des colonnes jour et heure pour permettre de tracer des variations
> en fonction du temps
> # Chaque fichier contenu dans l'objet p0fichiers est chargé, en supprimant
> les 18 premieres lignes,
> # et on met dans l'objet jourheure la fusion de la colonne jour (V1) et de
> la colonne heure (V2)
> # L'objet jourheure est recopie dans la premiere colonne de donnees
> # On supprime ensuite la deuxieme colonne (contenant les heures) qui est
> maintenant superflue
> # L'objet donnees est copié dans la base de donnees MySQL Mydata
> # Remarque : R comprend le format jour/mois/annee - MySQL : annee/mois/jour
> -> stockage en CHAR dans MySQL
>
>  for (i in 1:length(p0fichiers))
>    {
>      donnees<-read.table(p0fichiers[i], quote="\"", sep=";", dec=",",
> skip=18)
>      jourheure<-paste(donnees$V1, donnees$V2, sep=" ")
>      donnees[1]<-jourheure
>      donnees<-donnees[,-2]
> #  assignTable(con, "Datatable", donnees, append=TRUE) - Ne marche pas
>      dbWriteTable(con, "Datatable", donnees, append=TRUE)
>      rm(donnees, jourheure)
>    }
>
>
> # Idem avec les fichiers d'extension .Px en chargant toutes les lignes
> (skip=0)
> # Amelioration possible : creer une fonction avec en argument p0fichiers ou
> pxfichiers
>
>  for (i in 1:length(pxfichiers))
>    {
>      donnees<-read.table(pxfichiers[i], quote="\"", sep=";", dec=",",
> skip=0)
>      jourheure<-paste(donnees$V1, donnees$V2, sep=" ")
>      donnees[1]<-jourheure
>      donnees<-donnees[,-2]
> #   assignTable(con, "Datatable", donnees, append=TRUE) - Ne marche pas
>      dbWriteTable(con, Datatable", donnees, append=TRUE)
>      rm(donnees, jourheure)
>    }
> }
>
> tfichiers<-rfichiers
> save(rfichiers, file="tfichiers.r", ascii=TRUE)
> rm(list=ls())
>
> # Deconnexion à MySQL
>
> dbDisconnect(con)
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595


More information about the R-help mailing list