J’essaie d’initialiser un data.frame sans aucune ligne. En fait, je veux spécifier les types de données pour chaque colonne et les nommer, mais aucune ligne n'est créée à la suite de cette opération.
Le mieux que j'ai pu faire jusqu'à présent est quelque chose du genre :
df <- data.frame(Date=as.Date("01/01/2000", format="%m/%d/%Y"),
File="", User="", stringsAsFactors=FALSE)
df <- df[-1,]
Ce qui crée un data.frame avec une seule ligne contenant tous les types de données et les noms de colonnes que je voulais, mais crée également une ligne inutile qui doit ensuite être supprimée.
Existe-t-il une meilleure façon de procéder ?
Il suffit de l'initialiser avec des vecteurs vides :
df <- data.frame(Date=as.Date(character()),
File=character(),
User=character(),
stringsAsFactors=FALSE)
Voici un autre exemple avec différents types de colonnes :
df <- data.frame(Doubles=double(),
Ints=integer(),
Factors=factor(),
Logicals=logical(),
Characters=character(),
stringsAsFactors=FALSE)
str(df)
> str(df)
'data.frame': 0 obs. of 5 variables:
$ Doubles : num
$ Ints : int
$ Factors : Factor w/ 0 levels:
$ Logicals : logi
$ Characters: chr
N.B. :
Initialiser un data.frame
avec une colonne vide du mauvais type n'empêche pas les ajouts ultérieurs de lignes ayant des colonnes de types différents.
Cette méthode est juste un peu plus sécuritaire dans le sens où vous aurez les types de colonnes corrects dès le début, donc si votre code repose sur une vérification du type de colonne, il fonctionnera même avec un data.frame
avec zéro ligne.
Vous pourriez utiliser read.table
avec une chaîne vide pour l'entrée text
comme suit :
colClasses = c("Date", "character", "character")
col.names = c("Date", "File", "User")
df <- read.table(text = "",
colClasses = colClasses,
col.names = col.names)
Vous pouvez aussi spécifier les noms des colonnes sous forme de chaîne :
df <- read.csv(text="Date,File,User", colClasses = colClasses)
Merci à Richard Scriven pour l'amélioration