Подтвердить что ты не робот

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

Я использую read.delim(filename) без каких-либо параметров для чтения текстового файла с разделителями табуляции в 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? У меня есть заголовки столбцов и строки, у которых нет данных для всех столбцов.

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

findOffendingCharacter <- 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, findOffendingCharacter)

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

Ответ 4

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

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

Ответ 5

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

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