129 votes

Avertissement "Ligne finale incomplète" lors de la lecture d'un fichier .csv dans R

J'essaie de lire un fichier .csv dans R et d'utiliser cette formule :

pheasant<-read.table(file.choose(),header=TRUE,sep=",")

Je reçois ce message d'avertissement :

"incomplete final line found by readTableHeader on 'C:\Documents and Settings..."

Il y a plusieurs choses que je pense avoir causé cet avertissement, mais malheureusement je ne connais pas assez la R pour diagnostiquer le problème moi-même. J'ai donc pensé poster ici dans l'espoir que quelqu'un d'autre puisse le diagnostiquer pour moi !

  • Le fichier .csv était à l'origine un fichier Excel, que j'ai enregistré au format .csv.
  • le fichier comprend trois colonnes de données
  • chaque colonne de données est d'une longueur différente, c'est-à-dire que chaque colonne contient un nombre différent de valeurs.
  • Je veux comparer les moyennes (à l'aide d'un test t ou équivalent en fonction de la distribution normale / non normale) de deux des colonnes à la fois, donc par exemple, un test t entre les valeurs de la colonne 1 et celles de la colonne 2, puis un test t entre les valeurs de la colonne 1 et celles de la colonne 3, etc.

Toute aide ou suggestion serait sérieusement appréciée !

1 votes

@Kate : pouvez-vous nous lier au fichier lui-même ? J'ai quelques idées, mais il est difficile de dire de quel problème il s'agit sans avoir le fichier.

0 votes

Bonjour Joris - Je ne sais pas comment faire, désolé...

0 votes

La première colonne a 1045 valeurs, la deuxième a 623 valeurs et la troisième a 871 si cela peut aider... ? Ce sont toutes des valeurs numériques en nombres entiers et en demi-nombres, c'est-à-dire 23, 24,5 etc...

151voto

Hendrik Pon Points 317

Ce message indique que la dernière ligne du fichier ne se termine pas par un caractère de fin de ligne (EOL) (saut de ligne ( \n ) ou retour chariot + saut de ligne ( \r\n )). L'intention initiale de ce message était de vous avertir que le fichier pouvait être incomplet ; la plupart des fichiers de données ont un caractère EOL comme tout dernier caractère du fichier.

Le remède est simple :

  1. Ouvrir le fichier
  2. Naviguez jusqu'à la toute dernière ligne du fichier
  3. Placez le curseur à la fin de cette ligne
  4. Pulse return
  5. Sauvegarder le fichier

2 votes

Ce n'est pas la dernière ligne du fichier. C'est l'en-tête qu'il lit, c'est-à-dire vos cinq premières lignes.

0 votes

@JorisMeys Le message d'erreur, cependant, fait référence à la dernière ligne du fichier. En suivant les étapes ci-dessus, l'avertissement est effectivement supprimé.

1 votes

@WorldGov "incomplete final line" est un avertissement (pas une erreur) qui peut apparaître pour différentes raisons. Dans votre cas, il s'agit de l'absence d'une ligne finale EOL. Il est impossible que dans votre cas l'avertissement ait été lancé par la fonction readTableHeader, car celle-ci ne lit pas la dernière ligne. Votre problème n'est donc pas le même que celui de l'OP.

15voto

Joris Meys Points 38980

Êtes-vous vraiment sûr d'avoir sélectionné le fichier .csv et non le fichier .xls ? Je ne peux reproduire l'erreur que si j'essaie de lire un fichier .xls. Si j'essaie de lire un fichier .csv ou tout autre fichier texte, il est impossible de recréer l'erreur que vous obtenez.

> Data <- read.table("test.csv",header=T,sep=",")
> Data <- read.table("test.xlsx",header=T,sep=",")
Warning message:
In read.table("test.xlsx", header = T, sep = ",") :
  incomplete final line found by readTableHeader on 'test.xlsx'

readTableHead est la fonction c qui donne l'erreur. Elle essaie de lire les n premières lignes (standard les 5 premières) pour déterminer le type de données. Le reste des données est lu en utilisant scan() . Le problème est donc le format du fichier.

Une façon de le savoir est de définir le répertoire de travail comme étant le répertoire où se trouve le fichier. De cette façon, vous voyez l'extension du fichier que vous lisez. Je sais que sous Windows, l'extension n'est pas affichée de manière standard, ce qui fait que vous pouvez croire qu'il s'agit de csv alors que ce n'est pas le cas.

La prochaine chose à faire est d'ouvrir le fichier dans le Bloc-notes ou le Wordpad (ou un autre éditeur) et de vérifier que le format est équivalent au mien. test.csv :

Test1,Test2,Test3
1,1,1
2,2,2
3,3,3
4,4,
5,5,
,6,

Ce fichier vous donnera le cadre de données suivant :

> read.table(testfile,header=T,sep=",")
  Test1 Test2 Test3
1     1     1     1
2     2     2     2
3     3     3     3
4     4     4    NA
5     5     5    NA
6    NA     6    NA

Le format csv enregistré par excel sépare toutes les cellules par une virgule. Les cellules vides n'ont tout simplement pas de valeur. read.table() peut facilement gérer cela, et reconnaît les cellules vides sans problème.

0 votes

En supposant qu'il s'agisse d'un environnement Windows 7, si Kate regarde le fichier copié sur le bureau ou dans le dossier, l'icône d'un fichier .csv comporte un "a", tandis qu'un fichier .xlsx a une icône qui ressemble davantage à une feuille de calcul. Il s'agit d'un moyen visuel rapide pour déterminer le type de fichier. C'est beaucoup plus facile à voir lorsqu'il est enregistré sur le bureau, car les icônes sont plus grandes :)

2voto

erik Points 21

J'ai reçu le même message. Ma solution a consisté à : J'ai supprimé toutes les feuilles supplémentaires (onglets) dans le fichier .csv, éliminé les caractères non numériques, réenregistré le fichier en tant que fichier délimité par des virgules et chargé dans R v 2.15.0 en utilisant le langage standard :

filename<-read.csv("filename",header=TRUE)

Par mesure de précaution supplémentaire, j'ai fermé le logiciel et l'ai rouvert avant de charger le csv.

2voto

yifan Points 1

Dans certaines régions d'Europe, comme le caractère virgule sert de point décimal, la fonction read.csv2 doit être utilisée à la place.

0voto

Sir Ksilem Points 405

Puisque read.table() crée un dataframe, je pense que votre problème se situe ici. Un data.frame a une forme prédéfinie (n*m) et si vos colonnes ne sont pas égales, cela pourrait être le problème. Pour résoudre ce problème, consultez la réponse donnée ici création d'un tableau avec des dimensions de ligne différentes sur une question que j'ai posée il y a quelques heures

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X