我试图打开一个以'n‘空行开头的*.txt文件,我希望空行被认为是NA
。
我使用的是read.table()
函数和blank.lines.skip = FALSE
参数。如果空行数小于5,则该文件将正确打开,并具有适当的NA行数,但如果该文件有5行或更多空行,则将得到以下错误:empty beginning of file
。
我如何允许我的文件有尽可能多的空行,并获得适当数量的NA
行?
我非常感谢任何帮助和建议。谢谢!
发布于 2019-01-26 01:11:46
正如PavoDive所提到的,数字5被硬编码到基本R函数read.table
的定义中。如果您真的想在空白行中读取,则需要创建一个使用不同值的函数的临时版本。
这里有一种方法。在控制台中键入fix(read.table)
。在RStudio中,这将打开另一个窗口,该窗口显示read.table
背后的代码,并允许您进行更改。将第34行中的5更改为大于文件中前导空行数的数字。例如,我将其更改为6
当您点击"Save“时,您将在当前的R环境中看到一个名为read.table
的临时函数。(如果删除该对象、清除环境或重新启动R会话,则临时修改的read.table版本将消失,您将返回使用第34行中有5的read.table
的原始基本R版本。)现在试着阅读你的文件。它应该能够将您的文件读入具有适当数目的前导空行的表中。
发布于 2019-01-26 00:35:17
这似乎是该函数的预期行为:
如果您只键入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)
这里最重要的是什么?要了解大多数函数的代码,并了解其行为方式的原因。
https://stackoverflow.com/questions/54374248
复制相似问题