我有一个包含多个块的脚本,其中的行看起来像这样......
#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')
Run Code Online (Sandbox Code Playgroud)
当我获取脚本时,我得到这样的输出......
[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
Run Code Online (Sandbox Code Playgroud)
根据该输出,我重新加载数据Y并开始查找字符串到数字转换失败的记录.经过几个小时的挫折,我意识到数据X实际上是具有类型转换错误的数据.
看起来正在发生的是发出警告,但在脚本完成之前它不会显示在控制台上.有没有办法在警告出现后立即将警告输出到控制台?我尝试了flush.console(),但它似乎不适用于警告.
如果可以避免的话,我宁愿不在我的系统上加载任何额外的软件包.我正在使用它来工作,我不得不跳过几个箍,只是为了在我的电脑上安装CRAN发行版.
谢谢.我很感激帮助.
Bri*_*ggs 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")
}
Run Code Online (Sandbox Code Playgroud)
如果运行(甚至以交互方式),则会显示您看到的行为
> 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
Run Code Online (Sandbox Code Playgroud)
使用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"
Run Code Online (Sandbox Code Playgroud)