Как избежать предупреждения при введении NAs по принуждению



Я обычно предпочитаю кодировать R, чтобы я не получал предупреждения, но я не знаю, как избежать получения предупреждения при использовании as.numeric для преобразования символьного вектора.



например:



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


даст мне предупреждение, потому что он ввел NAs по принуждению. Я хочу, чтобы NAs был введен принуждением-есть ли способ сказать ему: "Да, это то, что я хочу сделать". Или я должен просто жить с предупреждением?



или я должен использовать другую функцию для этого задача?

623   4  

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

    Ничего не найдено.