我使用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中的选项卡文件吗?我有列标题和行没有所有列的数据。
答案 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并且有效。