今天來解答一個網友的疑惑,或許你也曾遇到過這個問題噢~
R語言中,txt無法正確的讀入的可能性有很多種。有位網友提供的一個無法正確讀入的文本文件,使用記事本打開,看起來一切正確(見圖片)。
但讀入的時候,報錯如下。
>read.table("1.txt")
Error intype.convert(data[], as.is = as.is, dec = dec, numerals = numerals, :
'<ff><fe><67>'多字節字符串有錯
此外,Warning messages:
Inread.table("1.txt") : line 1 appears to contain embedded nulls
Inread.table("1.txt") : line 2 appears to contain embedded nulls
Inread.table("1.txt") : line 3 appears to contain embedded nulls
Inread.table("1.txt") : line 4 appears to contain embedded nulls
Inread.table("1.txt") : line 5 appears to contain embedded nulls
Inscan(file = file, what = what, sep = sep, quote = quote, dec = dec,:embedded nul(s) found in input
報錯提示,文本中包含嵌入的null符號,所以無法正確讀取。那麼為什麼使用記事本打開卻一切正常呢?我們試試使用專業的文本編輯器VIM(如果有問題,可以百度VIM)打開(見圖片,原文件-VIM)。
注意了,與記事本看起來多了很多符號。因為在記事本下,文本中的很多異常符號是顯示不出來的。
以上兩個符號需要被刪除的,否者R可能出現讀取錯誤。
1)
將1.txt使用記事本打開,然後複製到excel裡。接著將excel裡的文本在複製一遍,粘貼到一個新建的txt文件 2.txt裡面。再次使用VIM打開,看起來就一切正常了(見圖片 修改後-VIM)。
然後,R就可以正常讀入了。
2)
在VIM下,將異常符號替換去除。如果熟悉使用VIM的同學,可以使用以下兩個命令替換異常符號:
%s/\r//g #備註:替換掉^M
%s/^@//g #備註:替換掉^@, ^@不能直接輸入,否者會報錯。正確的方法是Shift + Ctrl + 2 來輸入^@
另外在R最新版本 3.2.3 的read.table命令 多了一個選項:skipNUL。如果skipNul=TRUE可以自動忽略文件中的NULL符號。不過在這個例子中,由於異常符號^M的存在,即使使用skipNul=TRUE依然是會報錯的。需要將^M手動替換去除。