2013-02-20 68 views
77

警告を受け取らないようにRをコード化するのが一般的ですが、as.numericを使用して文字ベクタを変換するときに警告を受け取らないようにする方法はわかりません。例えば強制でNAsを導入するときの警告を避ける方法

:それは強制でNASに導入されたので

x <- as.numeric(c("1", "2", "X")) 

が私に警告を与えます。私はNAsが強要で導入されることを望んでいます - それは "これは私がやりたいことです"と言う方法があります。あるいは、私はただの警告で暮らすべきですか?

このタスクに別の機能を使用する必要がありますか?

+7

を参照してください '?suppressWarnings'多分? – A5C1D2H2I1M1N2O1R2T1

+3

この警告の問題点は何ですか?一般的に貴重な情報を提供します。私は厄介な驚きにRコンソールでより冗長な出力を好む。 – Roland

+11

@Roland私は全く同意しますが、警告を無視するだけであれば警告の有用性が減ります。だからこそ私は一般的に警告に "取り組んでいる"のが好きです。この場合、私はいつも警告を生成します。その多くは、データが文字列としてNAを表す "X"で入力されているので、関数は私がしたいものを正確に実行しています。 「私に知らせてくれてありがとう。でも、私がやっていることは分かっています。 'suppressWarnings'は完璧と思われます。 – Corone

答えて

106

使用suppressWarnings()

suppressWarnings(as.numeric(c("1", "2", "X"))) 
[1] 1 2 NA 

これは警告を抑制します。

26

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

簡単なポイント - 私はraRifxからdestring関数をクローブし、これを私自身の関数(別の関数内で起こる)として定義することでこれを使用して、基底R @Ari – user1945827

+0

完全に正当なものに固執することができました。この機能はhttps://github.com/gsk3/taRifx/blob/master/R/Rfunctions.R#L1161 –

+0

にあります。私はtaRifxとdestringの機能を設定しましたが、私はそれが公開されるのではないかと疑っています... – user1945827

12

通常、予期しない入力が行われたときに警告を表示したい場合があるので、警告を抑制することは最適な解決策ではありません。
以下の解決策は、データ型変換中に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 
+1

これは最高の答えです。 'suppressWarnings()'を使うのは悪い考えです。なぜなら時にはそれらの警告を見る必要があるからです。 – keberwein

関連する問題