programing

R의 부울 연산자 &&와 ||과 ||의 차이

closeapi 2023. 7. 5. 20:44
반응형

R의 부울 연산자 &&와 ||과 ||의 차이

R 언어 정의에 따르면, 사이의 차이는&그리고.&&에 상응하는 (해당는경우하경))|그리고.|| 않다는 는 전자는 벡터화된 반면 후자는 그렇지 않다는 것입니다.

도움말 텍스트에 따르면 "And"와 "And Also"("Or"와 "Or Else"에 해당)의 차이와 유사한 차이를 읽었습니다.의미:모든 평가가 그럴 필요가 없는 경우(즉, A, B 또는 C가 참이면 항상 참이므로 A가 참이면 평가를 중단함)

누가 여기 좀 비춰주시겠어요?또한 R에 AndAlso와 OrEse가 있습니까?

더 짧은 것들은 벡터화됩니다. 즉, 다음과 같은 벡터를 반환할 수 있습니다.

((-2:2) >= 0) & ((-2:2) <= 0)
# [1] FALSE FALSE  TRUE FALSE FALSE

긴 형태는 각 벡터의 첫 번째 요소만 검사하여 왼쪽에서 오른쪽으로 평가하므로 위의 내용은 다음과 같습니다.

((-2:2) >= 0) && ((-2:2) <= 0)
# [1] FALSE

도움말 페이지에 나와 있듯이, 이것은 긴 양식을 "제어 흐름 프로그래밍에 적합하며 [] if 절에서 일반적으로 선호됩니다."

따라서 벡터가 길이가 1인 것이 확실한 경우에만 긴 형식을 사용하려고 합니다.

길이 1 부울만 반환하는 함수인 경우와 같이 벡터가 길이 1만인지 확인해야 합니다.벡터의 길이가 1보다 클 수 있는 경우 짧은 형식을 사용하려고 합니다.따라서 확실하지 않은 경우 먼저 확인하거나 간단한 양식을 사용한 다음 을 사용해야 합니다.all그리고.any 이 제 흐 문 사 에 기 하 위 길 용 줄 를 니 입 1 다 이 해 음 과 름 어 ▁for ▁one ▁to ▁flow ▁reduce ▁it 로 니 ▁state 다 입 ▁like ▁to 줄 ▁length ▁use 다 ▁in , ments ▁control ▁1음 과if.

»all그리고.any벡터화된 비교의 결과에서 비교의 전부 또는 일부가 각각 참인지 여부를 확인하는 데 종종 사용됩니다. 않습니다. (단, 이러한 는 if 절에 합니다. if 절 이 함 수 결 단 과 길 가 이 벡 이 는 므 된 러 로 비 화 적 사 다 니 1다 합 하 용 합 기 에 음 에 서 결 는 한 과 한 이 다 러 니 않 의 사 습 그 에 터 서 적 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 and"라는 제목의 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

단락의 장점은 인수를 평가하는 데 오랜 시간이 걸릴 때만 나타납니다.이는 일반적으로 인수가 더 큰 개체를 처리하거나 더 복잡한 수학적 연산을 갖는 함수일 때 발생합니다.

: news(“R”)1를 1 ~ 1 이상으로 제공하는 것을 .&&또는||의 후속 입니다.

&&그리고.||"단락 회로"라고 하는 것입니다. 첫 하다면 두 입니다.

를 들어 첫 가 예들어피, ▁the가▁for자and▁example산▁if&& 두 번째하는 것은 의미가 할 수 없기 때문입니다.false && true그리고.false && false둘 다 거짓입니다).마지로가도 입니다.||첫 번째 피연산자가 참일 때.

당신은 여기에서 이것에 대해 더 읽을 수 있습니다: http://en.wikipedia.org/wiki/Short-circuit_evaluation 그 페이지의 표에서 당신은 그것을 볼 수 있습니다.&&는 와동합다니등다에 합니다.AndAlsoVB.NET에 있습니다.

측정 시스템 간에는 세 가지 관련된 차이점이 있습니다.&&/||그리고.&/|공식 문서에 설명되어 있습니다.다음은 요약입니다.

1. &그리고.|벡터화됨

, 벡터에 하려면 즉, 벡, 를 사용해야 합니다.&그리고.|:

a = c(TRUE, TRUE, FALSE, FALSE)
b = c(TRUE, FALSE, TRUE, FALSE)

a | b
# [1]  TRUE  TRUE  TRUE FALSE

a || b
# [1] TRUE

위해서&&/||첫 번째 이후의 모든 요소는 삭제됩니다.최근 은 최근버은사시유경생다성니합고를을 사용할 때합니다.&&/||:1µ다 보다 긴 :

In a || b : 'length(x) = 4 > 1' in coercion to 'logical(1)'

2. &&그리고.||단락이 나다

단락은 왼쪽이 결과를 결정하지 않은 경우에만 표현식의 오른쪽이 평가된다는 것을 의미합니다.거의 모든 프로그래밍 언어는 조건부 연산을 위해 이것을 합니다, 왜냐하면 그것은 쓸 때 유용한 관용구로 이어지기 때문입니다.if조건(예:

if (length(x) > 0L && x[1L] == 42) …

합니다. 단락이 없으면 코드가 실패합니다.x오른쪽에서 존재하지 않는 요소에 액세스하려고 하므로 이 비어 있습니다.단락이 없다면, 우리는 네스트를 사용해야 할 것입니다.if 더 록블, 더자한코이어니다집드로세:,▁blocks▁more▁to.

if (length(x) > 0L) {
    if (x[1L] == 42) …
}

일반적으로 조건식 내부(if,while) 항상 사용해야 합니다.&&그리고.||단축 코드가 필요하지 않더라도, 더 관용적이고 더 균일한 코드로 이어집니다.

3. &그리고.|비트 연산을 수행할 수 있습니다.

에서, 많대래밍언서에어프로은그의분,&그리고.|실제로 부울 산술 대신 비트 단위 산술을 수행합니다.즉, 두 정수에 대해a그리고.b,a & b비트 단위로 계산하고,a | b비트 단위 또는 를 계산합니다.부울 값의 경우 비트 연산과 논리 연산 간에 차이가 없지만 임의 정수의 경우 결과가 다릅니다.예를 들어.1 | 2 == 3대부분의 프로그래밍 언어에서.

그러나 R: R은 다음과 같은 숫자 인수를 강제합니다.&그리고.|논리적 값으로 변환하고 부울 산술을 수행합니다.

모두 유형이 두 가 인 수 유 경 제 외 우 인 형 모 두인 경우를 합니다.raw:

c(1, 3) | c(2, 4)
# [1] TRUE TRUE

as.raw(c(1, 3)) | as.raw(c(2, 4))
# [1] 03 07

주목할 필요가 있는 것은 그 수술들이! 부정)및 (논리적 부정) »xor 또 다 과 호 같 때 비 연 수 니 합 행 다 을 산트한될출로 될 때 을 수행합니다.raw논쟁들.

언급URL : https://stackoverflow.com/questions/6558921/difference-between-boolean-operators-and-and-between-and-in-r

반응형