J'ai découvert que reprex::reprex
ne peut pas lire le caractère ¦
(et un autre caractère spécial comme «Ã ©») et lance une erreur. Existe-t-il un moyen de faire fonctionner reprex avec le codage local (ici en français)?
Reprex
devtools::install_github("tidyverse/reprex")
Sortie dans le volet de la visionneuse
Error : callr subprocess failed: <text>:28:1: ')' unexpected 27: locale = c("LC_COLLATE" = "fr_LU.UTF-8") 28: ) ^
Informations sur la session
reprex_locale(x = { tibble::tribble( ~var1, ~var2, ~var3, "gr¦pefruit", "ugli fruit", 4L, "huckleberry", "kumquat", 6L, "duri¦n", "blackcurrant", 1L, "d¦te", "cantaloup¦", 1L, "fig", "canary m¦lon", 6L, "s¦l¦l berry", "rambutan", 5L )}, language = "fr", locale = c("LC_COLLATE" = "fr_LU.UTF-8") )
Mise à jour avec la suggestion de polkas
La locale = c("LC_COLLATE" = "French_France.1252")
et la locale = c("LC_COLLATE" = "fr_LU.UTF-8")
ont été essayées avec le résultat d'erreur suivant:
code
R version 4.0.2 (2020-06-22) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 x64 (build 18363) Matrix products: default locale: [1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252 [3] LC_MONETARY=French_France.1252 LC_NUMERIC=C [5] LC_TIME=French_France.1252 attached base packages: [1] stats graphics grDevices utils datasets methods [7] base loaded via a namespace (and not attached): [1] pillar_1.4.6 compiler_4.0.2 prettyunits_1.1.1 [4] remotes_2.1.1 tools_4.0.2 testthat_2.3.2 [7] digest_0.6.25 pkgbuild_1.1.0 pkgload_1.1.0 [10] evaluate_0.14 memoise_1.1.0 lifecycle_0.2.0 [13] tibble_3.0.3 pkgconfig_2.0.3 rlang_0.4.7 [16] reprex_0.3.0 cli_2.0.2 rstudioapi_0.11 [19] yaml_2.2.1 blogdown_0.20.2 xfun_0.15 [22] stringr_1.4.0 withr_2.2.0 knitr_1.29 [25] desc_1.2.0 fs_1.4.2 vctrs_0.3.2 [28] devtools_2.3.0 rprojroot_1.3-2 glue_1.4.1 [31] R6_2.4.1 processx_3.4.3 fansi_0.4.1 [34] rmarkdown_2.3 bookdown_0.20 sessioninfo_1.1.1 [37] whisker_0.4 callr_3.4.3 clipr_0.7.0 [40] magrittr_1.5 backports_1.1.7 ps_1.3.3 [43] ellipsis_0.3.1 htmltools_0.5.0 usethis_1.6.1 [46] assertthat_0.2.1 utf8_1.1.4 stringi_1.4.6 [49] crayon_1.3.4
console
``` r tibble::tribble( ~var1, ~var2, ~var3, "gr --- title: reprex_reprex.R author: cbo date: '2020-11-08' --- #> Error: <text>:3:9: INCOMPLETE_STRING inattendu(e) #> 10: #> 11: --- #> ^
Solution utilisée - pour ceux qui pourraient suivre
TL; DR : l'erreur est limitée au OS Windows
d' OS Windows
avec reprex 0.3.0
, l'installation de la version de développement a donc résolu le problème:
reprex::reprex(x = { tibble::tribble( ~var1, ~var2, ~var3, "gr¦pefruit", "ugli fruit", 4L, "huckleberry", "kumquat", 6L, "duri¦n", "blackcurrant", 1L, "d¦te", "cantaloup¦", 1L, "fig", "canary m¦lon", 6L, "s¦l¦l berry", "rambutan", 5L ) })
Le pourquoi c'est arrivé : comme mentionné par @cderv et bien expliqué dans le billet de blog ci-joint, R dans Windows a tendance à utiliser le codage local comme étape intermédiaire lors de l'écriture d'un fichier. Ainsi, lorsque vous utilisez writeLines()
avec R-Windows, cela writeLines()
les caractères spéciaux à moins que vous ne writeLines(..., usebytes = "TRUE")
aucune étape intermédiaire et l'utilisation d'octets tout au long de writeLines(..., usebytes = "TRUE")
.
3 Réponses :
Il est difficile de reproduire votre environnement même avec le package withr
. Dans mon environnement, cela fonctionne toujours correctement.
Cette solution de tidyverse
pourrait fonctionner https://github.com/tidyverse/reprex/blob/master/R/reprex-locale.R :
reprex_locale <- function(..., language = "en", locale = NULL) { withr::local_envvar(c(LANGUAGE = language)) if (!is.null(locale)) { # If we use withr::local_locale(), the new locale is NOT inherited by the # reprexing child process. Whereas it is if we use an env var approach. withr::local_envvar(locale) } reprex(...) }
Je comprends que reprex_locale
avec language = "fr" et certains locale
pourraient fonctionner pour vous.
Merci pour votre réponse polkas. J'ai essayé votre suggestion avec language = "fr"
et locale = c(LC_COLLATE = French_France.1252)
et avec seulement la version par défaut sans succès: Error: callr subprocess failed: <text>:27:1: unexpected ')'
. Ce n'est pas encore exporté dans le package, il pourrait donc être encore en développement.
Je pense que c'est un problème uniquement Windows; Je le vois lorsque j'exécute votre code là-bas, mais pas sur macOS.
J'ai essayé de le déboguer, mais il n'arrête pas de planter R. Il y a un bogue d'encodage quelque part, mais je ne le trouve pas.
essayez de changer votre locale en fr_LU.UTF-8. Je vais commencer à partir de la ligne de commande et essayer d'utiliser echo sth_french si cela fonctionne - s'il s'agit d'un problème R.
Bien essayé mais le résultat reste le même.
J'ai trouvé ce travail pour Windows et la version actuelle de reprex
CRAN (0.3.0) avec le code de caractère ANSI \xa6
pour ¦
:
reprex::reprex(x = { dfr <- tibble::tribble( ~var1, ~var2, ~var3, "gr\xa6pefruit", "ugli fruit", 4L, "huckleberry", "kumquat", 6L, "duri\xa6n", "blackcurrant", 1L, "d\xa6te", "cantaloup\xa6", 1L, "fig", "canary m\xa6lon", 6L, "s\xa6l\xa6l berry", "rambutan", 5L )
Je pense que cela est dû au fonctionnement de Windows et de l'encodage. Par défaut, Windows n'est pas UTF8 et vous avez un caractère spécial qui, je crois, nécessite cet encodage.
Parfois, le comportement est délicat car R utilisera le codage par défaut qui est native
et cela peut donner un résultat inattendu car il sera converti en natif avant d'écrire dans le fichier. Voir cet excellent article à ce sujet: https://kevinushey.github.io/blog/2018/02/21/string-encoding-and-r/
Pour que ça marche, je voudrais
reprex::reprex(input = "test.R")
tibble::tribble( ~var1, ~var2, ~var3, "gr¦pefruit", "ugli fruit", 4L, "huckleberry", "kumquat", 6L, "duri¦n", "blackcurrant", 1L, "d¦te", "cantaloup¦", 1L, "fig", "canary m¦lon", 6L, "s¦l¦l berry", "rambutan", 5L )
Cela fonctionne pour moi.
Il peut y avoir un problème dans reprex sur la façon dont il écrit dans un fichier sous Windows lorsque vous fournissez du code directement dans reprex::reprex()