显示R脚本生成的警告

时间:2013-03-15 18:09:16

标签: r

我有一个包含多个块的脚本,其中的行看起来像这样...

#Read data for X
DataX = read.delim(file = 'XRecords.txt',
                   col.names = XFields[,'FieldName'])
print('Data X read')
#Convert fields that should be numeric into numeric so they can summed
DataX[,NumFieldNames] = as.numeric(as.character(XData[,NumFieldNames]))
print('Data X scrubbed')

当我获取脚本时,我得到一个这样的输出......

[1] "Data X read"
[1] "Data X scrubbed"
[1] "Data Y read"
[1] "Data Y scrubbed"
Warning message:
In eval(expr, envir, enclos) : NAs introduced by coercion

根据该输出,我重新加载数据Y并开始查找字符串到数字转换失败的记录。经过几个小时的挫折之后,我意识到数据X实际上是具有类型转换错误的数据。

看起来发生了什么是警告,但是在脚本完成之前它不会显示在控制台上。有没有办法在警告出现后立即将警告输出到控制台?我尝试了flush.console(),但它似乎不适用于警告。

如果可以避免,我不希望在我的系统上加载任何其他软件包。我正在使用它进行工作,我不得不跳过几个箍,只是为了在我的电脑上安装CRAN发行版。

谢谢。我很感激帮助。

2 个答案:

答案 0 :(得分:14)

让我们举个例子来说明问题

foo <- function() {
  X <- c("1", "2", "three")
  print("Data X read")
  X <- as.numeric(X)
  print("Data X scrubbed")
  Y <- c("1", "2", "3")
  print("Data Y read")
  Y <- as.numeric(Y)
  print("Data Y scrubbed")
}

如果运行(甚至是交互式),您看到的行为会出现

> foo()
[1] "Data X read"
[1] "Data X scrubbed"
[1] "Data Y read"
[1] "Data Y scrubbed"
Warning message:
In foo() : NAs introduced by coercion

警告行为使用warn选项处理(请参阅help("options"))。这给出了包括

在内的选择
  

如果warn为1,则会在出现警告时打印警告。

将选项更改为1然后给出

> options(warn=1)
> foo()
[1] "Data X read"
Warning in foo() : NAs introduced by coercion
[1] "Data X scrubbed"
[1] "Data Y read"
[1] "Data Y scrubbed"

答案 1 :(得分:0)

问题是R中的警告打印到stderr而不是stdout。刷新stderr和out都可以解决问题。

flush(stderr())