2010-08-08 6 views
6

J'essaie d'incorporer quelques tracés de R dans mon document LaTeX à travers Sweave.Sweave n'imprime pas les caractères localisés

\SweaveOpts{eps = FALSE, pdf = TRUE, echo = FALSE, prefix = TRUE, prefix.string = data} 

<<label = abundanca:barplot, fig = TRUE, include = FALSE, results = hide>>= 
barplot(abund, xlab="Vzorčne postaje", ylab="Abundanca", main="", col="slategrey", names.arg=c("HM1", "HM2", "HM3", "HM4", "HM5", "HM6", "HM7", "HM8", "HM9", "HM10")) 
@ 

Le dispositif pdf en Sweave utilise le codage natif (comme défini dans options("encoding")), qui ne reconnaît pas les caractères locaux (ščćž) dans xlab (les remplace par deux points).

J'ai essayé de placer la possibilité de quelque chose qui fonctionne dans R:

options("encoding" = "CP1250.enc") 

mais je reçois une erreur:

Error in file() : unsupported conversion from 'CP1250.enc' to '' 

Toutes les solutions, solutions de contournement ...?

EDIT

Courir Rnw de aL3xa par

R CMD Sweave report.Rnw 

ne fonctionne pas.

Exécution du même fichier via Eclipse + StatET

Sweave("report.Rnw") 

cependant fait.

Mon fichier .Rnw et un .pdf.

+0

Cela fonctionne pour votre problème: http://stackoverflow.com/questions/31221471/custom-graphical-device-in-sweave –

Répondre

3

Celui-ci n'est pas aussi simple que cela puisse paraître. Techniquement, ce problème est lié à OS/locale/pdf writer/Sweave (voir "R Installation et Administration", chapitre 7). Puisque je cours sous GNU/Linux, cette "solution" n'est pas destinée aux utilisateurs Mac et Windows. Et juste pour rendre les choses un peu plus compliquées, les distributions GNU/Linux diffèrent, donc il y a une grande chance que si quelque chose fonctionne, disons, Ubuntu, ne fonctionne pas sur Arch Linux.

Je vais utiliser le jeu de données mtcars. Nous allons créer un graphe de base avec des caractères localisés:

pdf("foo.pdf") 
boxplot(mpg ~ cyl, data = mtcars, ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") 
dev.off() 

(crash cours de langue serbe: « Potrošnja goriva » signifie la consommation de carburant, « Broj cilindara » signifie nombre de cylindres et « Dijagram raspršenja » est équivalent pour scatterplot)

maintenant, je reçois tas d'avertissements:

Warning messages: 
1: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <c5> 
2: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <a1> 
3: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <c5> 
4: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <a1> 
5: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <c5> 
6: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <a1> 
7: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <c5> 
8: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") : 
    conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <a1> 

Alors que options(encoding = "CP1250") ne fait pas l'affaire - je reçois les mêmes mises en garde, pdf.options(encoding = "CP1250") mend s it, et le même pour pdf(file = "foo.pdf", encoding = "CP1250"). Donc, je vais retrouver mon ancien encodage avec options(encoding = "native.enc"), mettre pdf.options comme indiqué précédemment et faire les choses correctement.

Certains utilisateurs s'en tirent simplement en réglant pdf.options et ne rencontrent aucun problème avec Sweave. Donc, vous devriez insérer cette partie du code quelque part.fichier RNW, avant de commencer le traçage:

<<setOptions, echo = FALSE, results = hide>>== 
pdf.options(encoding = "CP1250") 
@ 

et plus tard, il suffit de faire:

<<plotTheFigure, echo = TRUE, fig = TRUE>>== 
# I've set echo to TRUE intentionally, to prove my point here 
boxplot(mpg ~ cyl, data = mtcars, ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") 
@ 

Et le même scénario est synonyme de graphiques ggplot2.

Certains d'entre vous obtiendront une sortie correcte, mais pas moi! Et comme je l'ai déjà dit, si vous utilisez Ubuntu, il y a une grande chance que cela fonctionne, mais pour l'instant, je ne peux pas sembler le faire vivre et lancer dans Arch. Et pour enregistrer vos frappes, vous pouvez télécharger Sweave file et/ou PDF file (exécuté sur la machine Arch). Comme vous pouvez le voir, les caractères localisés s'affichent correctement dans la fonction de tracé, mais se déforment dans Sweave. Maintenant, si j'essaie d'enregistrer le graphique au format PDF (sans Sweaving), j'obtiens le correct output. Donc, j'ai résolu certains problèmes, mais il reste encore beaucoup de travail à faire en termes d'essais et d'erreurs. Veuillez exécuter le fichier .RNW sur votre ordinateur et me donner quelques commentaires. Pour faciliter les choses, j'ai créé Rscript qui recueille vos informations système (pas d'informations personnelles) que je trouve pertinentes dans ce cas: ici le source, et voici mon output.

+0

Bien sûr, il existe une solution de contournement: vous devez créer un script séparé qui enregistre les graphiques, d'où charger le PDF avec des caractères localisés avec 'includegraphics'. Ça marche! – aL3xa

+0

Connaissez-vous une solution pour les utilisateurs de Windows? –