如何强制引进新加坡时如何避免警告
我通常更喜欢编码R,所以我不会得到警告,但我不知道如何避免使用as.numeric
转换字符向量时发出警告。
例如:
x <- as.numeric(c("1", "2", "X"))
会给我一个警告,因为它通过胁迫引入新加坡。 我希望通过强制手段引入新来的人 – 有没有办法告诉它“是这就是我想要做的事”。 或者我应该忍受这个警告?
或者我应该为这个任务使用不同的function?
使用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
一般来说,禁止警告并不是最好的解决办法,因为您可能希望在提供某些意外的input时被警告。
下面的解决scheme是在数据types转换期间仅维护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