2014-09-07 5 views
2

J'ai une table de données dans laquelle certains champs sont copiés et collés à partir de documents Word. Lorsque je tente d'impressions XTable de sortie de RMarkdown, il obtenir cette erreur:print xtable gsub paramètres régionaux

Error in gsub("&", "&", result, fixed = TRUE) : 
    input string 3 is invalid in this locale 
Calls: <Anonymous> ... eval -> eval -> print -> print.xtable -> sanitize -> gsub 
Execution halted 

Voici un exemple reproductible. J'ai appelé ce test4 de dataframe:

library(xtable) 
test4 <- structure(list(Record.ID = 81, Record.Type = "Type1", Short.Description = "specify 2-8\xb0C storage location",Record.State = "Work in Progress", Owner = "person1", Due.Date = "2014-08-14",days.left = -24), row.names = c(NA, -1L), .Names = c("Record.ID","Record.Type","Short.Description", "Record.State", "Owner","Due.Date", "days.left"), class = "data.frame") 
print(xtable(test4,display=c("d","d","s","s","s","s","s","d")),include.rownames=F,floating=F,type="html") 

Comment puis-je obtenir XTABLE d'imprimer même si je vais avoir des personnages étranges comme celui-ci?

FYI, la même opération fonctionne sans erreur lorsque je l'exécute sur Windows. Sur Linux debian, j'obtiens l'erreur. Aussi j'ai vérifié mes paramètres régionaux et il est réglé correctement.

Répondre

3

Eh bien, si vous copiez des données à partir de Windows, le codage est très probablement "latin1". Je devine que l'encodage par défaut pour debian linux est "UTF-8". Maintenant, quand vous dites que vous copiez des données, je ne comprends pas exactement comment vous obtenez ceci dans R, mais il semble que les octets ne soient pas convertis au codage correct. Compte tenu de votre exemple data.frame, vous pouvez "corriger" l'erreur en étant explicite sur le codage du champ "Short.Description" (qui est ce qui déclenche l'erreur dans ce cas). Essayez

Encoding(test4$Short.Description) <- "latin1" 

Ensuite, si vous exécutez à nouveau le print(), vous devriez obtenir quelque chose comme ça.

<!-- html table generated in R 3.1.0 by xtable 1.7-3 package --> 
<!-- Sun Sep 7 13:33:56 2014 --> 
<TABLE border=1> 
<TR> <TH> Record.ID </TH> <TH> Record.Type </TH> <TH> Short.Description </TH> 
<TH> Record.State </TH> <TH> Owner </TH> <TH> Due.Date </TH> 
<TH> days.left </TH> </TR> 
<TR> <TD align="right"> 81 </TD> <TD> Type1 </TD> 
<TD> specify 2-8°C storage location </TD> 
<TD> Work in Progress </TD> <TD> person1 </TD> <TD> 2014-08-14 </TD> 
<TD align="right"> -24 </TD> </TR> </TABLE> 
+0

Merci beaucoup. C'était exactement ça. Les données d'origine étaient enregistrées dans Excel sur Windows et les chaînes de caractères étaient codées dans tout ce qui était spécifié. Quand j'ai importé ce csv sur linux, l'encodage était deviné à tort. Après avoir parlé avec MrFlick, il a suggéré que je spécifie le codage de caractères quand j'importe mes données avec read.csv ("csvname.csv", stringsAsFactors = F, ** fileEncoding = "latin1" **) et ceci a fait le tour parfaitement. Merci! – variable

Questions connexes