распечатать проблемы с локалью xtable gsub

У меня есть таблица данных, в которой некоторые поля копируются и вставляются из текстовых документов. Когда я пытаюсь вывести отпечатки xtable из RMarkdown, я получаю эту ошибку:

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

Вот воспроизводимый пример. Я назвал этот фреймворк данных test4:

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")

Как я могу заставить xtable печатать, даже если у меня будут такие странные символы?

К вашему сведению, та же операция работает без ошибок, когда я запускаю ее в Windows. В debian linux я получаю сообщение об ошибке. Также я проверил свою локаль, и она установлена ​​​​правильно.


person variable    schedule 07.09.2014    source источник


Ответы (1)


Ну а если вы копируете данные из винды, то кодировка скорее всего "latin1". Я предполагаю, что кодировка по умолчанию для Debian Linux — «UTF-8». Теперь, когда вы говорите, что копируете данные, мне не ясно, как именно вы переносите это в R, но похоже, что байты не преобразуются в правильную кодировку.

Учитывая ваш пример data.frame, вы можете «исправить» ошибку, явно указав кодировку поля «Short.Description» (что и вызывает ошибку в этом случае). Пытаться

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

Затем, если вы снова запустите print(), вы должны получить что-то вроде этого.

<!-- 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>
person MrFlick    schedule 07.09.2014
comment
Большое спасибо. Это было именно так. Исходные данные сохранялись в excel на окнах, а строки символов были закодированы в любом указанном excel. Когда я импортировал этот csv в Linux, кодировка угадывалась неправильно. После разговора с MrFlick он предложил указать кодировку символов при импорте данных с помощью read.csv(csvname.csv,stringsAsFactors=F,fileEncoding=latin1), и это отлично сработало. Спасибо! - person variable; 07.09.2014