私は通常、警告が出ないようにRをコーディングすることを好みますが、as.numeric
を使用して文字ベクトルを変換するときに警告が出ないようにする方法がわかりません。
例えば:
x <- as.numeric(c("1", "2", "X"))
強制によってNAが導入されたため、警告が表示されます。強制によって導入されたNAが必要です-「はい、これが私がやりたいことです」と伝える方法はありますか。または、私は警告とともに生きるべきですか?
または、このタスクに別の機能を使用する必要がありますか?
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
一般に、警告を抑制することは最善の解決策ではありません。予期しない入力が行われたときに警告が必要になる場合があるためです。
以下のソリューションは、データ型変換中に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
Ggplot2散布図のy軸に使用したいデータフレーム列で同じ問題が発生しましたが、ここでそれを解決しました。
as.numeric(as.factor(columnName))
suppressWarnings()
を使用する代わりに、これも役立つかもしれません
ライブラリstringr
を使用できます。
library(tidyverse) #For piping
library(stringr) #Note: it's part of "tidyverse"
c("1", "2", "X") %>%
stringr::str_extract_all("\\(?[0-9,.]+\\)?") %>%
as.numeric()