@DirkEddelbuettel에서 설명한대로 NA
을 테스트 할 수 없습니다. 하지만 당신은 match
이 NA
를 반환하지 만들 수 있습니다 nomatch=0
를 사용하고 (0
이 FALSE
로 취급되기 때문에)을 if
절을 반전하여
는 코드를 단순화 할 수있다. 또한, 또 다른 유용한 코딩 관용구는
그래서 나는이처럼 쓸 것 ...은 if 절, 당신이 가지 중 하나에 변수 이름을 잘못 입력하지 않습니다 그런 식의 결과를 할당하는 것입니다 :
당신이 "자주", 당신은 두 가지 알아야 할 경우-다른 문제가있는 경우 그런데
observed <- if(match('SubjResponse',names(data), nomatch=0)) {
data$SubjResponse # match found
} else {
data$SubjResponse1 # no match found
}
:
(문자열을 NA 또는 NaN이를 포함하거나해서는 안 테스트하는 객체 모드 문자) 또는 논리 값으로 강제 변환 할 수없는 다른 유형을 사용할 수 있습니다. 숫자는 OK : 0은 FALSE
입니다. 단, NA/NaN 이외의 문자는 TRUE
입니다.
개체의 길이는 정확히 1 (스칼라 값)이어야합니다. 그것은 수 있습니다 더 이상하지만 경고를 얻을. 길이가 더 짧으면 오류가 발생합니다.
예 :
len3 <- 1:3
if(len3) 'foo' # WARNING: the condition has length > 1 and only the first element will be used
len0 <- numeric(0)
if(len0) 'foo' # ERROR: argument is of length zero
badVec1 <- NA
if(badVec1) 'foo' # ERROR: missing value where TRUE/FALSE needed
badVec2 <- 'Hello'
if(badVec2) 'foo' # ERROR: argument is not interpretable as logical
'match'는 항상 * * 첫번째 인수 ('x')과 같은 길이의 벡터를 리턴한다. 따라서이 경우 항상 스칼라 값입니다. – Tommy
'The R Inferno'의 Circle 8.1.4 http://www.burns-stat.com/pages/Tutor/R_inferno.pdf –