我正在尝试打开一个* .txt文件,该文件以'n'个空行开头,并且我希望将空行视为NA
。
我正在使用read.table()
函数和blank.lines.skip = FALSE
参数。
如果空行数少于5,则文件将以正确的NA行数正确打开,但是如果文件中有5行或更多空行,则会出现以下错误:empty beginning of file
。
如何允许我的文件具有任意数量的空行并获得正确数量的NA
行?
非常感谢您的帮助和建议。谢谢!
答案 0 :(得分:2)
这似乎是该函数的预期行为:
如果您只键入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)
这里的重点是什么?要知道您可以阅读大多数功能的代码,并了解它们为何如此行事。
答案 1 :(得分:1)
正如PavoDive所提到的,数字 5 被硬编码到基本R函数read.table
的定义中。如果您确实想读空白行,则需要制作一个使用其他值的函数的临时版本。
这是一种方法。在控制台中输入fix(read.table)
。在RStudio中,这将打开另一个窗口,向您显示read.table
后面的代码,并允许您进行更改。将第34行中的 5 更改为大于文件中前导空白行数的数字。例如,我将其更改为 6 :
当您点击“保存”时,您将在当前的R环境中看到一个名为read.table
的临时函数。 (如果删除该对象,清除环境或重新启动R会话,则read.table的临时修改版本将消失,并且您将返回使用read.table
的原始基本R版本的{5} 34.)现在尝试读取文件。它应该能够将您的文件读入具有适当数量的前导空白行的表中。