Как избежать предупреждения при введении NAs по принуждению
Я обычно предпочитаю кодировать R, чтобы я не получал предупреждения, но я не знаю, как избежать получения предупреждения при использовании as.numeric для преобразования символьного вектора.
например:
x <- as.numeric(c("1", "2", "X"))
даст мне предупреждение, потому что он ввел NAs по принуждению. Я хочу, чтобы NAs был введен принуждением-есть ли способ сказать ему: "Да, это то, что я хочу сделать". Или я должен просто жить с предупреждением?
или я должен использовать другую функцию для этого задача?
4 ответов:
использовать
suppressWarnings():suppressWarnings(as.numeric(c("1", "2", "X"))) [1] 1 2 NAэто подавляет предупреждения.
suppressWarnings()об этом уже говорилось. В качестве альтернативы можно вручную преобразовать проблемных персонажей первым на. Для вашей конкретной проблемы,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
Вы можете использовать библиотеку
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()
Comments