tipos - Cómo evitar advertencias cuando se introducen NA por coacción
penas por amenazas e insultos (4)
En general, la supresión de advertencias no es la mejor solución, ya que es posible que desee recibir una advertencia cuando se proporcione alguna información inesperada.
La siguiente solución es un contenedor para mantener solo NA durante la conversión de tipo de datos. No requiere ningún paquete.
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
Por lo general, prefiero codificar R para no recibir advertencias, pero no sé cómo evitar recibir una advertencia cuando uso as.numeric
para convertir un vector de caracteres.
Por ejemplo:
x <- as.numeric(c("1", "2", "X"))
Me dará una advertencia porque introdujo NA por coacción. Quiero que las NA sean introducidas por coacción, ¿hay alguna manera de decir "sí, esto es lo que quiero hacer"? ¿O debería simplemente vivir con la advertencia?
¿O debería usar una función diferente para esta tarea?
Puede usar la biblioteca 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()
Utilice suppressWarnings()
:
suppressWarnings(as.numeric(c("1", "2", "X")))
[1] 1 2 NA
Esto suprime las advertencias.
suppressWarnings()
ya ha sido mencionado. Una alternativa es convertir manualmente los caracteres problemáticos a NA primero. Para su problema particular, taRifx::destring
hace justamente eso. De esta forma, si recibe alguna otra advertencia inesperada de su función, no será suprimida.
> 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