programing

R에 객체(변수)가 정의되어 있는지 확인하는 방법은 무엇입니까?

lastmoon 2023. 7. 1. 09:19
반응형

R에 객체(변수)가 정의되어 있는지 확인하는 방법은 무엇입니까?

R에 어떤 변수가 정의되어 있는지 확인하고 싶습니다 - 오류가 발생하지 않습니다.어떻게 해야 하나요?

내 시도(성공하지 못함):

> is.na(ooxx)
Error: object 'ooxx' not found
> is.finite(ooxx)
Error: object 'ooxx' not found

감사합니다!

너는 원한다exists():

R> exists("somethingUnknown")
[1] FALSE
R> somethingUnknown <- 42
R> exists("somethingUnknown")
[1] TRUE
R> 

?exists"...는 정의됨"의 일부 정의에 대해 설명합니다.예.

> exists("foo")
[1] FALSE
> foo <- 1:10
> exists("foo")
[1] TRUE

함수 안에 있는 경우 ()를 놓치는 것이 원하는 것입니다.

exchequer = function(x) {
    if(missing(x)){
        message("x is missing… :-(")
    }
}

exchequer()
x is missing… :-(

다른 사람들이 지적했듯이, 당신은 당신이 찾고 있는 것은exists다음을 사용합니다.existsR의 기본 패키지에서 사용하는 이름을 사용하면 변수를 정의했는지 여부에 관계없이 true가 반환됩니다.

> exists("data")
[1] TRUE

이것을 피하기 위해 (배즈가 지적한 바와 같이; 참조).?exists), 를 사용합니다.inherits인수:

> exists("data", inherits = FALSE)
[1] FALSE

foo <- TRUE
> exists("foo", inherits = FALSE)
[1] TRUE

물론, 첨부된 패키지의 이름 공간을 검색하려면 이 또한 부족합니다.

> exists("data.table")
[1] FALSE
require(data.table)
> exists("data.table", inherits = FALSE)
[1] FALSE
> exists("data.table")
[1] TRUE

기본 패키지가 아닌 첨부된 패키지에서 검색할 수 있는 유일한 방법은 다음과 같습니다.

any(sapply(1:(which(search() == "tools:rstudio") - 1L),
           function(pp) exists(_object_name_, where = pp, inherits = FALSE)))

교체 비교_object_name_와 함께"data.table"(TRUE) vs."var"(FALSE)

(물론 RStudio에 가입하지 않으셨다면 첫 번째 자동 연결 환경은"package:stats")

따옴표를 사용하지 않으려면 다음을 사용할 수 있습니다.deparse(substitute())의 예제 섹션에서 발견한 속임수?substitute:

is.defined <- function(sym) {
  sym <- deparse(substitute(sym))
  env <- parent.frame()
  exists(sym, env)
}

is.defined(a)
# FALSE
a <- 10
is.defined(a)
# TRUE

따옴표를 사용해도 괜찮다면 다음을 사용할 수 있습니다.

존재함(("x")

따옴표를 사용하지 않으려면 다음을 사용할 수 있습니다.

존재함(deparase(분사(x))

대기열 시스템에서 결과 배열을 만든 경우와 같이 찾고 있는 변수의 이름을 정확히 모르는 경우가 있을 수 있습니다.정규식을 예상하는 "ls" 및 인수 "pattern"을 사용하여 이러한 문제를 해결할 수 있습니다.

"존재" 기능은 다음과 같은 방식으로 재구현될 수 있습니다.

exists <-function(variablename) {
   #print(ls(env=globalenv()))
   return(1==length(ls(pattern=paste("^",variablename,"$",sep=""),env=globalenv())))
}

이 답변을 준비하면서 함수 내에서 ls()를 호출할 때 환경의 사양이 필요하다는 점에 조금 놀랐습니다.감사합니다, 스택 오버플로!"all.names" 속성도 true로 설정했어야 하지만 생략했습니다.

언급URL : https://stackoverflow.com/questions/9368900/how-to-check-if-object-variable-is-defined-in-r

반응형