2013-03-15 60 views
9

我有一個包含有看起來像這樣的線路多塊一個腳本...顯示由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發行版安裝在我的電腦上,我不得不跳過一些箍環。

謝謝。我很感激幫助。

+0

你得原諒我(可能)圍繞R.寬鬆的詞彙我很新的軟件。 – Adam 2013-03-15 18:10:35

+0

您可以交互式運行腳本嗎? – 2013-03-15 18:13:44

回答

11

讓我們顯示了問題的例子

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" 
+0

你走了。非常感謝Brian。 – Adam 2013-03-15 19:32:40

0

問題是R中的警告被打印到stderr而不是stdout。同時刷新stderr和out應該可以解決問題。

flush(stderr()) 
+0

這是真的嗎? - - 你能有一個更完整的例子嗎? – 2016-11-10 17:23:36