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

Ptit_Bleu ptit_bleu at yahoo.fr
Mon Aug 27 10:22:53 CEST 2007


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.

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.

Is it a problem with the way I save tfichiers or is it a problem with the
condition if (nfichiers!="0") ?
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)
-- 
View this message in context: http://www.nabble.com/Problem-with-save-or-and-if-%28I-think-but-maybe-not-...%29-tf4333945.html#a12343236
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list