web-dev-qa-db-fra.com

Avertissement: la chaîne d'entrée n'est pas disponible dans ce paramètre régional

Rstudio version 1.0.136

R version 3.3.2

Il est étrange que lorsque j'exécute du code (il a un commentaire chinois dans le code) ligne par ligne dans un .Rmd le fichier avec la console Rmarkdown , affichera un avertissement comme suit:

Warning message:
In strsplit(code, "\n", fixed = TRUE) :
   input string 1 is invalid in this locale

C'est tellement ennuyeux, car chaque ligne apparaîtra. J'ai modifié l'encodage de texte par défaut dans le paramètre de RStudio, mais ni UTF-8 ni BG2312 ne peuvent empêcher l'apparition de ce message d'avertissement. Veuillez noter qu'il apparaît juste lorsqu'un code de code est exécuté ligne par ligne, si je sélectionne un morceau, un bouton-poussoir pour produire un avertissement html ml n'apparaît pas. mon code est le suivant:

```{r}
da=read.table("m-intcsp7309.txt",header=T)
head(da)
# date intel sp三列
length(da$date)
# 444数据
intc=log(da$intc+1)
# 测试
plot(cars)
# 测试警告信息
plot(cars)
# 为什么会出现警告?
plot(cars)
```

J'ai testé ça ne vient pas d'un commentaire chinois, je le rencontre quand je n'utilise que l'anglais
juste maintenant. Voici plus d'informations:

Sys.getlocale()
[1] "LC_COLLATE=Chinese (Simplified)_People's Republic of China.936;
     LC_CTYPE=Chinese (Simplified)_People's Republic of China.936;
     LC_MONETARY=Chinese (Simplified)_People's Republic of China.936;
     LC_NUMERIC=C;LC_TIME=Chinese (Simplified)_People's Republic of China.936"
17
lemmingxuan

Intégrez cela directement dans le script Rmarkdown qui contient le (s) commentaire (s) en caractères chinois:

Sys.setlocale('LC_ALL','C')

Si vous l'exécutez simplement dans la console R avant d'exécuter le script rmarkdown, cela peut modifier temporairement le paramètre et fonctionner, mais comme vous l'avez dit, cela ne restera pas de cette façon si vous redémarrez R. C'est pourquoi il vaut mieux incorporer directement cette ligne dans le ou les scripts qui en ont besoin.

9
www

J'ai eu un problème similaire avec gsub() et j'ai pu le résoudre, sans changer les paramètres régionaux, simplement en définissant useBytes = TRUE. La même chose devrait fonctionner dans strsplit(). De la documentation:

Si TRUE, la correspondance est effectuée octet par octet plutôt que caractère par caractère, et les entrées avec des codages marqués ne sont pas converties.

6
crsh