运行 当 read.table 在 R 中有 5 个或更多的第一个空行时进入错误“文件的空开头”
Run into error “empty beginning of file” when read.table in R with 5 or more first empty lines
我正在尝试打开一个以 'n' 空行开头的 *.txt 文件,我希望将空行视为 NA
。
我正在使用 read.table()
函数和 blank.lines.skip = FALSE
参数。
如果空行数少于 5,则文件会以正确数量的 NA 行正确打开,但如果文件有 5 个或更多空行,则会出现以下错误:empty beginning of file
。
我怎样才能让我的文件有尽可能多的空行,并获得适当数量的 NA
行?
如果有任何帮助和建议,我将不胜感激。谢谢!
这似乎是函数的预期行为:
如果您只键入 read.table
,您将看到该函数的代码。关于总长度的第一季度,您会发现 5 被(有点武断地)选为认为文件为空的行数的阈值。我复制了一个函数片段:
pbEncoding <- if (encoding %in% c("", "bytes", "UTF-8"))
encoding
else "bytes"
numerals <- match.arg(numerals)
if (skip > 0L)
readLines(file, skip)
nlines <- n0lines <- if (nrows < 0L)
5
else min(5L, (header + nrows))
lines <- .External(C_readtablehead, file, nlines, comment.char,
blank.lines.skip, quote, sep, skipNul)
if (encoding %in% c("UTF-8", "latin1"))
Encoding(lines) <- encoding
nlines <- length(lines)
if (!nlines) {
if (missing(col.names))
stop("no lines available in input")
rlabp <- FALSE
cols <- length(col.names)
和
else if (missing(col.names))
col.names <- paste0("V", 1L:cols)
if (length(col.names) + rlabp < cols)
stop("more columns than column names")
if (fill && length(col.names) > cols)
cols <- length(col.names)
if (!fill && cols > 0L && length(col.names) > cols)
stop("more column names than columns")
if (cols == 0L)
stop("first five rows are empty: giving up")
}
if (check.names)
col.names <- make.names(col.names, unique = TRUE)
这里的重点是什么?要知道您可以访问大多数函数的代码并理解它们为何如此运行。
正如 PavoDive 所提到的,数字 5 被硬编码到基本 R 函数 read.table
的定义中。如果您真的想读取空白行,则需要制作一个使用不同值的函数的临时版本。
这是一种方法。在控制台中输入 fix(read.table)
。在 RStudio 中,这将打开另一个 window,向您显示 read.table
背后的代码,并允许您进行更改。将第 34 行中的 5 更改为大于文件中前导空白行数的数字。比如我改成了6:
当您点击 "Save" 时,您会在当前的 R 环境中看到一个名为 read.table
的临时函数。 (如果您删除该对象,清除您的环境,或重新启动您的 R 会话,read.table 的临时修改版本将消失,您将回到使用 read.table
的原始基础 R 版本,其中有 5在第 34 行。)现在尝试读取您的文件。它应该能够将您的文件读入具有适当数量的前导空白行的 table。
我正在尝试打开一个以 'n' 空行开头的 *.txt 文件,我希望将空行视为 NA
。
我正在使用 read.table()
函数和 blank.lines.skip = FALSE
参数。
如果空行数少于 5,则文件会以正确数量的 NA 行正确打开,但如果文件有 5 个或更多空行,则会出现以下错误:empty beginning of file
。
我怎样才能让我的文件有尽可能多的空行,并获得适当数量的 NA
行?
如果有任何帮助和建议,我将不胜感激。谢谢!
这似乎是函数的预期行为:
如果您只键入 read.table
,您将看到该函数的代码。关于总长度的第一季度,您会发现 5 被(有点武断地)选为认为文件为空的行数的阈值。我复制了一个函数片段:
pbEncoding <- if (encoding %in% c("", "bytes", "UTF-8"))
encoding
else "bytes"
numerals <- match.arg(numerals)
if (skip > 0L)
readLines(file, skip)
nlines <- n0lines <- if (nrows < 0L)
5
else min(5L, (header + nrows))
lines <- .External(C_readtablehead, file, nlines, comment.char,
blank.lines.skip, quote, sep, skipNul)
if (encoding %in% c("UTF-8", "latin1"))
Encoding(lines) <- encoding
nlines <- length(lines)
if (!nlines) {
if (missing(col.names))
stop("no lines available in input")
rlabp <- FALSE
cols <- length(col.names)
和
else if (missing(col.names))
col.names <- paste0("V", 1L:cols)
if (length(col.names) + rlabp < cols)
stop("more columns than column names")
if (fill && length(col.names) > cols)
cols <- length(col.names)
if (!fill && cols > 0L && length(col.names) > cols)
stop("more column names than columns")
if (cols == 0L)
stop("first five rows are empty: giving up")
}
if (check.names)
col.names <- make.names(col.names, unique = TRUE)
这里的重点是什么?要知道您可以访问大多数函数的代码并理解它们为何如此运行。
正如 PavoDive 所提到的,数字 5 被硬编码到基本 R 函数 read.table
的定义中。如果您真的想读取空白行,则需要制作一个使用不同值的函数的临时版本。
这是一种方法。在控制台中输入 fix(read.table)
。在 RStudio 中,这将打开另一个 window,向您显示 read.table
背后的代码,并允许您进行更改。将第 34 行中的 5 更改为大于文件中前导空白行数的数字。比如我改成了6:
当您点击 "Save" 时,您会在当前的 R 环境中看到一个名为 read.table
的临时函数。 (如果您删除该对象,清除您的环境,或重新启动您的 R 会话,read.table 的临时修改版本将消失,您将回到使用 read.table
的原始基础 R 版本,其中有 5在第 34 行。)现在尝试读取您的文件。它应该能够将您的文件读入具有适当数量的前导空白行的 table。