Skip to content

Commit 107f695

Browse files
authored
Update datatable-programming.Rmd #7220 alignment
based on : $ git diff 2f49a0d HEAD ./vignettes/datatable-programming.Rmd diff --git a/vignettes/datatable-programming.Rmd b/vignettes/datatable-programming.Rmd index 93c6dc5..34c6d77 100644
1 parent 0686af6 commit 107f695

File tree

1 file changed

+37
-1
lines changed

1 file changed

+37
-1
lines changed

vignettes/fr/datatable-programming.Rmd

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ vignette: >
1111

1212
```{r echo=FALSE, file='../_translation_links.R'}
1313
```
14-
`r .write.translation.links("Translations of this document are available in: %s")`
14+
`r .write.translation.links("Une traduction de ce document est disponible en : %s")`
1515

1616
```{r init, include = FALSE}
1717
require(data.table)
@@ -374,6 +374,42 @@ print(j)
374374
DT[, j, env = list(j = j)]
375375
```
376376

377+
### Erreurs habituelles
378+
379+
Il est important de comprendre la différence entre le fait de passer un objet et passer un nom qui pointe vers un objet. Activez la sortie verbeuse dans les exemples suivants.
380+
381+
```{r obj_vs_objname}
382+
DT[, fun(Petal.Width), env = list(fun = mean), verbose=TRUE]
383+
DT[, fun(Petal.Width), env = list(fun = "mean"), verbose=TRUE]
384+
```
385+
386+
Les utilisateurs voudront habituellement substituer le nom de la fonction plutôt qu'insérer le contenu actuel de la fonction. C'est pourquoi la seonde approche est souvent préférée (celle où l'on passe une chaîne de caractères).
387+
388+
En cas de doute sur le fonctionnement de l'interface `env` , utilisez `verbose = TRUE` pour voir comment les expressions sont résolues en interne.
389+
390+
### Utiliser l'argument `env` à l'intérieur d'une autre fonction
391+
392+
Ce fut une décision d'architecture que l'argument `env` devait suivre les règles _Standard Evaluation_ (SE) , c'est à dire que les valeurs passées à `env` soient évaluées dans leur contexte original telles quelles. Vous trouverez des informations complémentaires sur le sujet dans le [Manuel du langage R, section Computing on the language](https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Computing-on-the-language)). Il en résulte que l'**utilisation de l'argument `env` à partir d'une fonction ne nécessite pas de traitement particulier**. Cela signifie aussi que l'alias `.()` pour une `list()`, _a la_ `env = .(.col="Petal.Length")`, ne fonctionnera pas; utiliser à la place `env = list(.col="Petal.Length")`.
393+
394+
```{r env_se}
395+
fun = function(x, col.mean) {
396+
stopifnot(is.character(col.mean), is.data.table(x))
397+
x[, .(col_avg = mean(.col)), env = list(.col = col.mean)]
398+
}
399+
fun(DT, col.mean="Petal.Length")
400+
```
401+
402+
Si la fonction la plus externe suit elle-même les règles NSE (Non-Standard Evaluation), alors elle doit résoudre les objets du langage de la même manière que si elle passait ses arguments à tout autre fonction SE.
403+
404+
```{r env_nse}
405+
fun = function(x, col.mean) {
406+
col.mean = substitute(col.mean)
407+
stopifnot(is.name(col.mean), is.data.table(x))
408+
x[, .(col_avg = mean(.col)), env = list(.col = col.mean)]
409+
}
410+
fun(DT, col.mean=Petal.Length)
411+
```
412+
377413
## Interfaces supprimées
378414

379415
Dans `[.data.table`, il est aussi possible d'utiliser d'autres mécanismes pour la substitution de variables ou pour passer des expressions entre guillemets. Ceux-ci incluent `get` et `mget` pour l'injection en ligne de variables en fournissant leurs noms sous forme de chaînes, et `eval` qui indique à `[.data.table` que l'expression passée en argument est une expression entre guillemets et qu'elle doit être traitée différemment. Ces interfaces doivent maintenant être considérées comme retirées et nous recommandons d'utiliser le nouvel argument `env` à la place.

0 commit comments

Comments
 (0)