source

강제로 NA를 도입할 때 경고를 피하는 방법

manysource 2023. 6. 9. 22:06

강제로 NA를 도입할 때 경고를 피하는 방법

저는 일반적으로 경고를 받지 않도록 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

나는 우리가 숫자로 변환할 수 없는 다양한 값을 가질 수 있는 경우를 위해 장고레키 함수를 약간 수정했습니다.내 기능에서는 템플릿 검색이 수행되며 템플릿을 찾을 수 없으면 FALSE가 반환됩니다.!gperl 이전에, 그것은 우리가 템플릿과 일치하지 않는 벡터 요소가 필요하다는 것을 의미합니다.나머지는 다음과 유사합니다.as.num기능.예:

as.num.pattern <- function(x, pattern){
  stopifnot(is.character(x))
  na = !grepl(pattern, x)
  x[na] = -Inf
  x = as.numeric(x)
  x[na] = NA_real_
  x
}

as.num.pattern(c('1', '2', '3.43', 'char1', 'test2', 'other3', '23/40', '23, 54 cm.'))

[1] 1.00 2.00 3.43   NA   NA   NA   NA   NA

언급URL : https://stackoverflow.com/questions/14984989/how-to-avoid-warning-when-introducing-nas-by-coercion