我通常更喜歡編碼R,以免得到警告,但我不知道如何避免在使用as.numeric
轉換字符向量時發出警告。如何通過強制引入NAs時避免警告
例如:
x <- as.numeric(c("1", "2", "X"))
能不能給我一個警告,因爲它推出來港受到脅迫。我希望通過強制方式引入新加坡 - 有沒有辦法告訴它「是這就是我想要做的事情」。或者我應該接受警告嗎?
或者我應該爲這項任務使用不同的功能?
我通常更喜歡編碼R,以免得到警告,但我不知道如何避免在使用as.numeric
轉換字符向量時發出警告。如何通過強制引入NAs時避免警告
例如:
x <- as.numeric(c("1", "2", "X"))
能不能給我一個警告,因爲它推出來港受到脅迫。我希望通過強制方式引入新加坡 - 有沒有辦法告訴它「是這就是我想要做的事情」。或者我應該接受警告嗎?
或者我應該爲這項任務使用不同的功能?
使用suppressWarnings()
:
suppressWarnings(as.numeric(c("1", "2", "X")))
[1] 1 2 NA
這抑制了警告。
suppressWarnings()
已經被提及。另一種方法是先將有問題的字符手動轉換爲NA。對於你的特殊問題,taRifx::destring
就是這樣做的。這樣,如果你從你的函數中得到一些其他的意外警告,它不會被壓制。
> library(taRifx)
> x <- as.numeric(c("1", "2", "X"))
Warning message:
NAs introduced by coercion
> y <- destring(c("1", "2", "X"))
> y
[1] 1 2 NA
> x
[1] 1 2 NA
只是一個快速的點 - 我使用這個通過從raRifx中分離出destring函數並將其定義爲我自己的函數(當它發生時,在另一個函數中),它允許我堅持基於R @Ari – user1945827 2015-02-01 10:35:28
完全合法。你可以在這裏找到這個函數:https://github.com/gsk3/taRifx/blob/master/R/Rfunctions.R#L1161 – 2015-02-02 12:32:41
謝謝。我在我設置的功能中引用了taRifx和destring,但我懷疑它會被髮布... – user1945827 2015-02-02 16:25:09
一般來說,抑制警告並不是最好的解決方案,因爲您可能希望在提供某些意外輸入時發出警告。
下面的解決方案是在數據類型轉換過程中僅維護NA的包裝。不需要任何包裝。
as.num = function(x, na.strings = "NA") {
stopifnot(is.character(x))
na = x %in% na.strings
x[na] = 0
x = as.numeric(x)
x[na] = NA_real_
x
}
as.num(c("1", "2", "X"), na.strings="X")
#[1] 1 2 NA
這是最好的答案。使用'suppressWarnings()'通常是一個壞主意,因爲我們有時需要看到這些警告。 – keberwein 2017-09-26 18:49:30
見'?也許suppressWarnings'? – A5C1D2H2I1M1N2O1R2T1 2013-02-20 16:32:40
這個警告有什麼問題?通常它會提供有價值的信息我更喜歡R控制檯中的更詳細的輸出來討厭令人驚訝的事情。 – Roland 2013-02-20 16:53:15
@Roland我完全同意,但如果你習慣於忽略它們,警告的用處就會減少。這就是爲什麼我一般喜歡「解決」警告。在這種情況下,我會一直生成警告,並且會有很多警告 - 我的數據以「X」代表NA的字符串進入,所以函數正在按照我希望的方式執行。我想說「謝謝你讓我知道,但沒關係,我知道我在做什麼」。 'suppressWarnings'似乎很完美。 – Corone 2013-02-20 16:56:12