首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当R中的read.table中有5行或更多的第一行空行时,出现“文件的空开头”错误

当R中的read.table中有5行或更多的第一行空行时,出现“文件的空开头”错误
EN

Stack Overflow用户
提问于 2019-01-25 23:42:45
回答 2查看 2.2K关注 0票数 1

我试图打开一个以'n‘空行开头的*.txt文件,我希望空行被认为是NA

我使用的是read.table()函数和blank.lines.skip = FALSE参数。如果空行数小于5,则该文件将正确打开,并具有适当的NA行数,但如果该文件有5行或更多空行,则将得到以下错误:empty beginning of file

我如何允许我的文件有尽可能多的空行,并获得适当数量的NA行?

我非常感谢任何帮助和建议。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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版本。)现在试着阅读你的文件。它应该能够将您的文件读入具有适当数目的前导空行的表中。

票数 2
EN

Stack Overflow用户

发布于 2019-01-26 00:35:17

这似乎是该函数的预期行为:

如果您只键入read.table,您将看到该函数的代码。大约在总长度的第一节,您会发现5 (有些随意)被选择为行数的阈值,以考虑文件为空。我复制函数的一个片段:

代码语言:javascript
运行
复制
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)

代码语言:javascript
运行
复制
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)

这里最重要的是什么?要了解大多数函数的代码,并了解其行为方式的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54374248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档