it-swarm-ru.tech

R: недопустимая многобайтовая строка

Я использую read.delim (имя файла) без каких-либо параметров, чтобы прочитать текстовый файл с разделителями табуляции в R.

df = read.delim(file)

Это сработало как задумано. Теперь у меня есть странное сообщение об ошибке, и я не могу понять его:

Error in type.convert(data[[i]], as.is = as.is[i], dec = dec, na.strings = character(0L)) : 
invalid multibyte string at '<fd>'
Calls: read.delim -> read.table -> type.convert
Execution halted

Кто-нибудь может объяснить, что такое многобайтовая строка? Что значит fd? Есть ли другие способы прочитать файл вкладки в R? У меня есть заголовки столбцов и строк, которые не имеют данных для всех столбцов.

39
Martin Preusse

Я понимаю, что уже довольно поздно, но у меня была похожая проблема, и я решил опубликовать то, что сработало для меня. Я использовал утилиту iconv (например, "iconv file.pcl -f UTF-8 -t ISO-8859-1 -c"). Опция "-c" пропускает символы, которые невозможно перевести.

27
Patrick B.

У меня была такая же странная проблема с файлом из программы e-prime (edat -> SPSS преобразование), но потом я обнаружил, что есть много дополнительных кодировок, которые вы можете использовать. это помогло мне:

tbl <- read.delim("dir/file.txt", fileEncoding="UCS-2LE")
19
dani

Если вы хотите R-решение, вот небольшая удобная функция, которую я иногда использую, чтобы найти, где скрывается нарушающий (multiByte) символ. Обратите внимание, что это символ следующий того, что печатается. Это работает, потому что print будет работать нормально, но substr выдает ошибку, когда присутствуют многобайтовые символы.

find_offending_character <- function(x, maxStringLength=256){  
  print(x)
  for (c in 1:maxStringLength){
    offendingChar <- substr(x,c,c)
    #print(offendingChar) #uncomment if you want the indiv characters printed
    #the next character is the offending multibyte Character
  }    
}

string_vector <- c("test", "Se\x96ora", "works fine")

lapply(string_vector, find_offending_character)

Я исправляю этот персонаж и запускаю его снова. Надеюсь, что это помогает кому-то, кто сталкивается с invalid multibyte string ошибка.

14
Ram Narasimhan

Это произошло со мной, потому что у меня был символ "авторского права" в одной из моих строк! Как только он был удален, проблема решена.

Хорошее практическое правило: убедитесь, что символы, не отображаемые на клавиатуре, удалены, если вы видите эту ошибку.

1
Dr Nick Engerer

Я понял, что Leafpad является подходящим и простым текстовым редактором для просмотра и сохранения/преобразования в определенных наборах символов - по крайней мере, в мире Linux.

Я использовал это, чтобы сохранить Latin-15 в UTF-8, и это сработало.

0
Robin