如何在R中修复:readTableHeader发现的不完整的最后一行

4,862 阅读2分钟

你在R中可能遇到的一个警告是:

Warning message:
In read.table(file = file, header = header, sep = sep, quote = quote,  :
  incomplete final line found by readTableHeader on 'my_data.csv' 

当你试图将一个CSV文件读入R中,但文件的最后一行不是空白时,就会出现这个警告。

值得注意的是,这只是一个警告信息,而不是一个错误。即使出现这个信息,你的文件仍然会被导入到R中。

本教程分享如何完全避免这个警告。

如何重现该警告

假设我有以下名为my_data.csv的CSV文件,我想将其导入R中:

现在假设我试图使用下面的代码将这个CSV文件导入R中:

#import CSV file
df <- read.csv('my_data.csv')

Warning message:
In read.table(file = file, header = header, sep = sep, quote = quote,  :
  incomplete final line found by readTableHeader on 'my_data.csv'

我收到一条警告信息,因为CSV文件的最后一行不是空白。

然而,该文件仍然被成功导入:

#view imported data frame
df

  team points assists
1    A     20       5
2    B     15       3
3    C     19       9
4    D     20       3.

方法一:如何避免警告

避免这个警告的方法之一是简单地将 read.csv()函数放在suppressWarnings()函数内:

#import CSV file and suppress any warnings
df <- suppressWarnings(read.csv('my_data.csv'))

#view data frame
df

  team points assists
1    A     20       5
2    B     15       3
3    C     19       9
4    D     20       3

这次我们就能在没有任何警告的情况下导入CSV文件。

这种方法的好处是,我们不必直接修改文件。

这种方法的缺点是,如果在导入文件时有更严重的警告需要我们知道,我们将无法看到它们。

方法2:如何避免该警告

另一种避免该警告的方法是直接修改CSV文件。

具体来说,我们可以到文件的最后一行,按回车键在文件的末尾创建一个新的空行:

现在,当我们导入CSV文件时,我们不会收到任何警告:

#import CSV file
df <- read.csv('my_data.csv')

#view data frame
df

  team points assists
1    A     20       5
2    B     15       3
3    C     19       9
4    D     20       3

这种方法的好处是,我们在导入文件时仍能看到任何其他警告。

这种方法的缺点是,我们必须直接修改文件,而不是简单地使用程序化的解决方案。

其他资源

下面的教程解释了如何在R中执行其他常见操作:

如何在R中使用readLines()函数
如何将CSV文件导入R中
如何在R中使用read.table