R:无效的多字节字符串

Mar*_*sse 39 r

我使用read.delim(filename)而没有任何参数来读取R中的制表符分隔文本文件.

df = read.delim(file)
Run Code Online (Sandbox Code Playgroud)

这按预期工作.现在我有一个奇怪的错误消息,我无法理解它:

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
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释多字节字符串是什么?fd是什么意思?还有其他方法可以读取R中的选项卡文件吗?我有列标题和行,没有所有列的数据.

小智 27

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

  • 尝试使用此代码设置系统本地化Sys.setlocale("LC_ALL","C") (9认同)

小智 19

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

tbl <- read.delim("dir/file.txt", fileEncoding="UCS-2LE")
Run Code Online (Sandbox Code Playgroud)

  • 当使用 `readr` 时,它会是 `read_delim(someFile, locale = locale(encoding = "windows-1252"))`。 (2认同)

Ram*_*han 14

如果你想要一个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)
Run Code Online (Sandbox Code Playgroud)

我修复了那个角色并再次运行它.希望能帮助遇到invalid multibyte string错误的人.

  • 尼斯.这有助于我在巨大的R字符串中找到未知/不可见的字符. (2认同)