You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: vignettes/fr/datatable-fread-and-fwrite.Rmd
+33-22Lines changed: 33 additions & 22 deletions
Original file line number
Diff line number
Diff line change
@@ -71,7 +71,8 @@ print(dt_from_text)
71
71
72
72
#### 1.1.2 Lecture à partir d'URLs
73
73
74
-
`fread()` peut lire les données directement à partir d'URLs web en passant l'URL en tant que chaîne de caractères dans l'argument `file`. Cela vous permet de télécharger et de lire les données à partir d'internet en une seule passe.
74
+
`fread()` peut lire les données directement à partir d'URLs web en passant l'URL en tant que chaîne de caractères dans l'argument `file`.
75
+
Cela vous permet de télécharger et de lire les données à partir d'internet en une seule ligne.
@@ -86,7 +87,7 @@ Dans beaucoup de cas, `fread()` peut automatiquement détecter et décompresser
86
87
-`.gz` / `.bz2` (gzip / bzip2) : acceptés et fonctionnent de manière indépendante.
87
88
-`.zip` / `.tar` (archives ZIP ou tar, fichier unique) : acceptées — `fread()` lira le premier fichier de l'archive si elle n'encontient qu'un seul.
88
89
89
-
> Note : si l'archive contient plusieurs fichiers, `fread()` échouera avec une erreur.
90
+
**Note** : si l'archive contient plusieurs fichiers, `fread()` échouera avec une erreur.
90
91
91
92
### 1.2 Séparateur automatique et détection des sauts de lignes
92
93
@@ -112,7 +113,7 @@ Par défaut (`skip="auto"`), `fread` va automatiquement sauter les lignes vides
112
113
113
114
### 1.3 Détection avancée et automatique du type de colonne
114
115
115
-
Dans le monde réel, beaucoup d'ensembles de données contiennent des colonnes qui sont vides au départ, remplies avec des zéros, ou qui apparaissent numériques mais qui contiendront des caractères ultérieurement. Pour gérer de telles incohérences, `fread()` de `data.table` utilise une stratégie robuste de détection du type de colonne.
116
+
Dans la pratique, beaucoup d'ensembles de données contiennent des colonnes qui sont vides au départ, remplies avec des zéros, ou qui apparaissent numériques mais qui contiendront des caractères ultérieurement. Pour gérer de telles incohérences, `fread()` utilise une stratégie robuste de détection du type de colonne.
116
117
117
118
Depuis la v1.10.5, `fread()` échantillonne les lignes en lisant des blocs de lignes contigües à partir de plusieurs points espacés régulièrement dans l'ensemble du fichier, y compris le début, le milieu et la fin. Le nombre de lignes échantillonnées est choisi dynamiquement en fonction de la taille et de la structure du fichier et vaut typiquement aux environs de 10 000, mais il peut être plus petit ou légèrement supérieur. Ce grand échantillonnage aide à détecter les changements de type qui se produisent ultérieurement dans les données (par exemple `001` qui devient `0A0`, ou des blancs qui deviennent des valeurs).
118
119
@@ -131,18 +132,20 @@ Le type de chaque colonne est déduit en se basant sur le type le plus bas néce
131
132
Ce qui permet :
132
133
133
134
- d'allouer la mémoire de manière unique à l'avance en utilisant le type correct
134
-
- d'éviter la relecture du fichier ou de définir les colClasses manuellement
135
+
- d'éviter la relecture du fichier ou de définir les `colClasses` manuellement
135
136
- d'améliorer la vitesse et l'efficacité de la mémoire
136
137
137
-
**Exceptions sur le type dans les valeurs non échantillonnées**
138
+
**Différents types dans les valeurs non échantillonnées**
138
139
139
140
Si le type est modifié dans les lignes qui ne sont pas échantillonnées, `fread()` détecte cela automatiquement et relit le fichier pour rétablir l'assignation correcte du type, sans nécessiter l'intervention de l'utilisateur. Par exemple une colonne échantillonnée comme entier pourrait ultérieurement contenir `00A` — ce qui déclenchera une relecture automatique en tant que caractères.
140
141
141
142
En activant `verbose=TRUE` vous pourrez voir toute la logique de détection ainsi que les relectures.
142
143
143
-
### 1.4 Détection des erreurs au plus tôt à la fin du fichier
144
+
### 1.4 Détection des erreurs à la fin du fichier au plus tôt
144
145
145
-
Parce qu'un grand nombre d'échantillons signifie que l'on se rapproche de la fin du fichier, les problèmes critiques tels qu'un nombre incohérent de colonnes, un bas de page mal formaté, ou des guillemets ouvrants qui ne sont pas fermés — peuvent être détectés et rapportés presque instantanément. Cette détection d'erreurs au plus tôt évite la surcharge d'un nouveau traitement du fichier complet ou l'allocation excessive de la mémoire, simplement pour trouver une erreur à la fin. Cela permet une réaction plus rapide et une utilisation plus efficace des ressources, particulièrement lorsque vous travaillez avec de gros ensembles de données.
146
+
Parce que l'échantillon contient la fin du fichier, les problèmes critiques tels qu'un nombre incohérent de colonnes, un bas de page mal formaté, ou des guillemets ouvrants qui ne sont pas fermés — peuvent être détectés et rapportés presque instantanément.
147
+
Cette détection d'erreurs au plus tôt évite la surcharge d'un nouveau traitement du fichier complet ou l'allocation excessive de la mémoire, simplement pour trouver une erreur à la fin.
148
+
Cela permet une réaction plus rapide et une utilisation plus efficace des ressources, particulièrement lorsque vous travaillez avec de gros ensembles de données.
146
149
147
150
### 1.5 Prise en charge de `integer64`
148
151
@@ -158,7 +161,7 @@ L'argument integer64 et l'option correspondante acceptent les valeurs suivantes
158
161
159
162
-`"integer64"` (par défaut) : lit les entiers longs en tant que `bit64::integer64` avec la précision complète.
160
163
161
-
-`"double"` ou `"numeric"`: lit les entiers longs en tant que nombres à double précision, éventuellement en perdant discrètement la précision (similaire à `utils::read.csv` en base R).
164
+
-`"double"` ou `"numeric"`: lit les entiers longs en tant que nombres à double précision, éventuellement en perdant sans avertir l'utilisateur la précision (similaire à `utils::read.csv` en base R).
162
165
163
166
-`"character"` : lit les entiers longs en tant que chaînes de caractères.
164
167
@@ -177,7 +180,7 @@ Pour économiser de la mémoire et pour améliorer les performances, utilisez le
177
180
- Si vous avez besoin uniquement de quelques colonnes, utilisez `select`.
178
181
- Si vous voulez exclure uniquement quelques colonnes, utilisez `drop` — ceci évite de lister tout ce que vous voulez garder.
179
182
180
-
Points clé:
183
+
Points clé:
181
184
-`select` : vecteur des noms des colonnes ou des positions à garder (les autres seront ignorés).
182
185
-`drop`: vecteur des noms des colonnes ou des positions à ignorer (les autres sont gardés).
183
186
- N'utilisez pas `select` et `drop` simultanément — ils sont mutuellement exclusifs.
@@ -193,12 +196,20 @@ Utilisez `skip="chaîne"` dans `fread` pour chercher une ligne contenant une sou
193
196
194
197
`fread` détecte automatiquement la manière dont les guillemets sont échappés — qu'ils soient simples ('') ou doubles ("") ou échappés avec la barre oblique inverse (respectivement \' et \") — sans nécessiter l'intervention de l'utilisateur. Ceci est déterminé en utilisant un grand échantillon de données (voir le point 3), et vérifié sur le fichier complet.
195
198
196
-
Scénari pris en charge :
199
+
Exemples pris en charge :
197
200
- Guillemets non échappés dans les champs entre guillemets
198
-
par exemple, `"This "quote" is invalid"` — est reconnu tant que le nombre de colonnes reste cohérent.
201
+
par exemple, `"Ces "guillemets" ne sont pas valides, mais fread marche quand même"` — est reconnu tant que le nombre de colonnes reste cohérent :
202
+
203
+
```{r}
204
+
data.table::fread(text='x,y\n"Ces "guillemets" ne sont pas valides, mais fread marche quand même",1')
205
+
```
199
206
200
207
- Champs qui ne sont pas entre guillemets mais qui commencent par des guillemets
201
-
par exemple, `Invalid"Field,10,20` — est reconnu correctement comme n'étant pas un champ entre guillemets.
208
+
par exemple, `pas"valide,1` — est reconnu correctement comme n'étant pas un champ entre guillemets.
209
+
210
+
```{r}
211
+
data.table::fread(text='x,y\npas"valide,1')
212
+
```
202
213
203
214
Contraintes et limitations :
204
215
- les règles de l'échappement et du nombre des colonnes doivent être cohérentes tout au long du fichier.
@@ -210,7 +221,8 @@ A partir de la v1.10.6, `fread` résoud les ambiguïtés de manière plus fiable
210
221
211
222
## 2. fwrite()
212
223
213
-
`fwrite()` est le pendant de `fread()` pour l'enregistrement rapide. Il est conçu pour être rapide, sensible aux defaults, et facile à utiliser, tout en reprenant la plupart des facilités de `fread`.
224
+
Pour l'écriture rapide d'un fichier CSV, `fwrite()` est le partenaire de `fread()`.
225
+
Il est conçu pour être rapide, sensible aux defaults, et facile à utiliser, tout en reprenant la plupart des facilités de `fread`.
214
226
215
227
### 2.1 Guillements intelligents et minimaux (quote="auto")
**Précision complète pour les grands entiers** : `fwrite` écrit les colonnes `bit64::integer64` en les convertissant en chaînes de caractères avec la précision complète. Ce qui évite la perte de données ou la conversion silencieuse en double qui pourrait se produire avec des écrivains moins spécialisés. Ceci est crucial pour les IDs ou les mesures qui demandent plus que l'intervalle des entiers `32-bit` du standard R ou de la double précision `53-bit`.
257
269
258
-
**Gestion directeg** : ce traitement direct et soigné des nombres spéciaux assure l'intégrité des données et l'efficacité des entrées / sorties, en évitant les conversions intermédiaires inutiles vers des types moins précis.
270
+
**Gestion directe** : ce traitement direct et soigné des nombres spéciaux assure l'intégrité des données et l'efficacité des entrées / sorties, en évitant les conversions intermédiaires inutiles vers des types moins précis.
259
271
260
272
```{r}
261
273
if (requireNamespace("bit64", quietly = TRUE)) {
262
274
dt_i64 = data.table(uid = bit64::as.integer64("1234567890123456789"), val = 100)
263
275
temp_i64_out = tempfile(fileext = ".csv")
264
276
fwrite(dt_i64, temp_i64_out)
265
277
cat(readLines(temp_i64_out), sep = "\n")
266
-
267
278
unlink(temp_i64_out)
268
279
}
269
280
```
270
281
271
282
### 2.4 Ordre des colonnes et contrôle des sous-ensembles
272
283
273
-
Pour contrôler l'ordre et le sous-ensemble des colonnes écrites dans le fichier, réduisez le data.table avant d'appeler `fwrite()`. L'argument `col.names` de `fwrite()` est un booléen (TRUE/FALSE) qui contrôle si la ligne d'entête est écrite, et non quelles colonnes sont écrites.
284
+
Pour contrôler l'ordre et le sous-ensemble des colonnes écrites dans le fichier, copiez le `data.table` avant d'appeler `fwrite()`. L'argument `col.names` de `fwrite()` est un booléen (TRUE/FALSE) qui contrôle si la ligne d'entête est écrite, et non quelles colonnes sont écrites.
274
285
275
286
```{r}
276
287
dt = data.table(A = 1:3, B = 4:6, C = 7:9)
@@ -283,13 +294,13 @@ file.remove("out.csv")
283
294
284
295
## 3. Note sur les performances
285
296
286
-
Bien que cette vignette se concentre sur les fonctionnalités et sur l'utilisation, le but de `fread` et `fwrite` est la vitesse. Les performances des E/S de `data.table` sont un sujet pour le banc d'essais continu.
297
+
Bien que cette vignette se concentre sur les fonctionnalités et sur l'utilisation, le but de `fread` et `fwrite` est la vitesse.
287
298
288
-
Pour les utilisateurs intéressés par les détails, et les performances comparées mises à jour, nous recommandons ces billets de blog externes, utilisant le paquet `atime` pour une analyse rigoureuse :
299
+
Pour les utilisateurs intéressés de voir la performance par rapport aux autres systèmes comparables, nous recommandons ces billets de blog externes, utilisant le paquet `atime` pour une analyse rigoureuse :
289
300
290
301
-**[data.table asymptotic timings](https://tdhock.github.io/blog/2023/dt-atime-figures/)** : compare les performances de `fread` et `fwrite` par rapport à d'autres paquets populaires de R tels que `readr` et `arrow`.
291
-
-**[Benchmarking data.table with polars, duckdb, and pandas](https://tdhock.github.io/blog/2024/pandas-dt/)** : compare les E/S de `data.table` et regroupe les performances face aux bibliothèques principales Python.
302
+
-**[Benchmarking data.table with polars, duckdb, and pandas](https://tdhock.github.io/blog/2024/pandas-dt/)** : comparaison avec les bibliothèques principales Python.
292
303
293
-
Ces bancs d'essais montrent d'une manière cohérente que `fread` et `fwrite` sont hautement compétitifs et occupent souvent les premières places quant aux performances dans l'écosystème R.
304
+
Ces comparaisons démontrent que `fread` et `fwrite` sont hautement compétitifs et occupent souvent les premières places quant aux performances dans l'écosystème R.
0 commit comments