R:无效的多字节字符串

时间:2011-02-14 15:19:18

标签: 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中的选项卡文件吗?我有列标题和行没有所有列的数据。

5 个答案:

答案 0 :(得分:26)

我意识到这已经很晚了,但我遇到了类似的问题,我想我会发布对我有用的东西。我使用了iconv实用程序(例如"iconv file.pcl -f UTF-8 -t ISO-8859-1 -c")。 “-c”选项会跳过无法翻译的字符。

答案 1 :(得分:18)

我对程序e-prime(edat - &gt; SPSS转换)中的文件有一个类似的奇怪问题,但后来我发现你可以使用许多额外的编码。这对我有用:

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

答案 2 :(得分:11)

如果你想要一个R解决方案,这里有一个小的便利功能,我有时会用来找到有问题的(multiByte)角色潜伏的地方。请注意,打印的内容是 next 字符。这是有效的,因为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错误的人。

答案 3 :(得分:1)

这件事发生在我身上,因为我的一个字符串中有'版权'符号!一旦删除,问题就解决了。

一个好的经验法则,如果您看到此错误,请确保删除键盘上未显示的字符。

答案 4 :(得分:0)

我发现Leafpad是一个足够简单的文本编辑器,可以查看和保存/转换某些字符集 - 至少在linux世界中。

我用它来将Latin-15保存为UTF-8并且有效。