부울 연산자 && 및 ||
받는 따르면 R 언어 정의 의 차이 &
및 &&
(대응 |
하고 ||
), 후자는 아니지만 전자 벡터화된다는 것이다.
도움말 텍스트 에 따르면 , "And"와 "AndAlso"( "Or"및 "OrElse")의 차이점과 유사한 차이점을 읽습니다. 의미 : 모든 평가가 필요하지 않은 경우 (예 : A가 참인 경우 A 또는 B 또는 C는 항상 참이므로 A가 참인지 평가 중지)
누군가 여기에서 빛을 비출 수 있습니까? 또한 R에 AndAlso와 OrElse가 있습니까?
짧은 것은 벡터화되어 다음과 같이 벡터를 리턴 할 수 있음을 의미합니다.
((-2:2) >= 0) & ((-2:2) <= 0)
# [1] FALSE FALSE TRUE FALSE FALSE
긴 형식은 왼쪽에서 오른쪽으로 평가하여 각 벡터의 첫 번째 요소 만 검사하므로 위의 내용은
((-2:2) >= 0) && ((-2:2) <= 0)
# [1] FALSE
도움말 페이지에서 알 수 있듯이 더 긴 형식은 "제어 흐름 프로그래밍에 적합하며 일반적으로 if 절에서 선호됩니다."
따라서 벡터가 길이가 하나 인 경우에만 긴 형식을 사용하려고합니다.
당신이해야 절대적으로 그들이 그 수익 만 길이가 1 인 부울 함수입니다 어디에 벡터는 이러한 경우에서와 같이 유일한 길이 1, 수있는 특정. 벡터 길이가 1보다 큰 경우 짧은 형식을 사용하려고합니다. 당신이 절대적으로 확실하지 않은 경우 그래서, 당신이 중 하나를 먼저 확인해야한다, 또는 사용 후 짧은 형식을 사용 all
하고 any
같은 제어 흐름 문에서 사용하기위한 길이 하나에 감소 if
.
함수 all
와 any
벡터화는 종종 벡터화 된 비교 결과에 사용되어 비교의 전부 또는 일부가 각각 참인지 확인합니다. 이러한 함수의 결과는 길이 1이어야하므로 if 절에 사용하기에 적합하지만 벡터화 된 비교의 결과는 그렇지 않습니다. (이러한 결과는에서 사용하기에 적합합니다 ifelse
.
마지막 차이점은 다음 &&
과 같습니다. 그리고 ||
필요한만큼의 용어 만 평가합니다 (단락이 의미하는 것 같습니다). 예를 들어, 다음은 정의되지 않은 값을 사용한 비교입니다 a
. 이 단락은,하지 않은 것처럼 &
및 |
하지 않습니다, 그것은 오류를 줄 것이다.
a
# Error: object 'a' not found
TRUE || a
# [1] TRUE
FALSE && a
# [1] FALSE
TRUE | a
# Error: object 'a' not found
FALSE & a
# Error: object 'a' not found
마지막으로 "and and andand "라는 제목 의 R Inferno 섹션 8.2.17을 참조하십시오 .
"단락" 에 대한 대답 은 잠재적으로 오해의 소지가 있지만 약간의 진실이 있습니다 (아래 참조). 는 R에서 / 언어 S, &&
그리고 ||
첫 번째 인수의 첫 번째 요소를 평가한다. 벡터 또는 목록의 다른 모든 요소는 첫 번째 요소 값에 관계없이 무시됩니다. 이 연산자는 if (cond) {} else{}
새로운 벡터를 생성하는 대신 건설 작업을 수행하고 프로그램 제어를 지시 하도록 설계되었습니다 &
. |
연산자는 벡터에 대해 작업하도록 설계되어 있으므로 "병렬"로 적용되어 가장 긴 논쟁. 벡터의 길이가 같지 않으면 더 짧은 인수의 재활용이 수행됩니다.
에 인수하는 경우 &&
또는 ||
평가 연속적으로 값 중 하나입니다 왼쪽에서 오른쪽으로하면, "단락"는 점에서이 결정적 다음 평가를 중단하고 최종 값이 반환됩니다.
> if( print(1) ) {print(2)} else {print(3)}
[1] 1
[1] 2
> if(FALSE && print(1) ) {print(2)} else {print(3)} # `print(1)` not evaluated
[1] 3
> if(TRUE && print(1) ) {print(2)} else {print(3)}
[1] 1
[1] 2
> if(TRUE && !print(1) ) {print(2)} else {print(3)}
[1] 1
[1] 3
> if(FALSE && !print(1) ) {print(2)} else {print(3)}
[1] 3
&&
그리고 ||
"단락"무엇을라고합니다. 즉, 첫 번째 피연산자가 식의 값을 결정하기에 충분하면 두 번째 피연산자를 평가하지 않습니다.
행의 첫 번째 피연산자는 예를 들어 &&
거짓 다음의 식의 값을 변경 (수 없기 때문에, 두 번째 피연산자 평가 소용 없다 false && true
하고 false && false
모두 거짓). 동일은 간다 ||
첫 번째 피연산자에 해당하는 경우.
당신은 더 이것에 대해 여기 읽을 수 있습니다 : http://en.wikipedia.org/wiki/Short-circuit_evaluation을 테이블에서 해당 페이지에 당신이 볼 수 &&
에 해당 AndAlso
난 당신이 언급하는 가정 VB.NET,있다.
참고 URL : https://stackoverflow.com/questions/6558921/boolean-operators-and
'IT story' 카테고리의 다른 글
왜 프린트하지 않습니까! (0) | 2020.04.17 |
---|---|
컨텍스트를 전달하는 동안 expressjs로 리디렉션하려면 어떻게해야합니까? (0) | 2020.04.17 |
객체 지향 프로젝트를 어떻게 디자인합니까? (0) | 2020.04.17 |
(lambda) 함수 클로저는 무엇을 캡처합니까? (0) | 2020.04.17 |
CS0120 : 비 정적 필드, 메서드 또는 속성 'foo'에 개체 참조가 필요합니다. (0) | 2020.04.17 |