抑制R中读取器解析问题

16

我目前正在使用readr包读取文件。想法是使用read_delim逐行读取以查找未结构化数据文件中的最大列数。代码输出了parsing问题。我知道这些问题并将在导入后处理列类型。有没有办法关闭problems(),因为通常的options(warn)无效。

i=1
max_col <- 0
options(warn = -1)
while(i != "stop")
{
  n_col<- ncol(read_delim("file.txt", n_max = 1, skip = i, delim="\t"))
  if(n_col > max_col) {
    max_col <- n_col
    print(max_col)
  }
  i <- i+1
  if(n_col==0) i<-"stop"
}
options(warn = 0) 

我正在尝试抑制的控制台输出如下所示:
.See problems(...) for more details.
Warning: 11 parsing failures.
row      col   expected  actual
  1 1####4 valid date 1###8

我有一种感觉,你应该在导入文件之前修复R中的文件。也许awk更适合这个任务? - Tensibai
看起来 suppressWarnings(x <- readr::parse_integer(c("1X", "blah", "3"))) 是可以工作的... - cory
2
可能更好的方法是打开一个file连接,逐行读取文件并计算分隔符的数量?max(sapply(readLines("file.txt"),function(x){length(strsplit(x,"\t")[[1]])})) - Spacedman
2个回答

30

在 R 中,您可以在使用包时抑制三个主要的烦人的事情:

  1. 消息 suppressMessages(YOUR_FUNCTION)
  2. 警告 suppressWarnings(YOUR_FUNCTION)
  3. 包启动消息 suppressPackageStartupMessages(YOUR_FUNCTION)

因此,在您的情况下,我的建议是让包开发人员知道这件事,这样他/她就可以在函数中添加一个 verbose 参数。


8
如果您正在使用RStudio的'R Markdown',则可以传递以下参数来抑制警告消息以及列名。 RMD warning suppress
```{r warning = FALSE, message=FALSE}

HTH
AA


或者在您的knitr选项中使用knitr::opts_chunk$set( message = FALSE, warning = FALSE ) - Mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接