1. 학습
  2. /
  3. 강의
  4. /
  5. 효율적인 R 코드 작성

Connected

연습 문제

& 대신 && 사용하기

두 주사위 눈이 같은지 판단하기 위해 move_square() 함수는 if 문을 사용해요.

if (is_double[1] & is_double[2] & is_double[3]) {
    current <- 11 # Go To Jail - square 11 == Jail
}

& 연산자는 항상 양쪽 인수를 모두 평가해요. 즉, x & y라고 쓰면 R은 언제나 x와 y가 무엇인지 계산하려고 해요. 어떤 경우에는 이렇게 하는 것이 비효율적일 수 있어요. 예를 들어 x가 FALSE라면, y의 값과 상관없이 x & y는 항상 FALSE가 되죠. 따라서 그 계산을 생략하면 약간의 처리 시간을 절약할 수 있어요. && 연산자는 이 점을 활용해, 전체 결과에 영향을 주지 않는 경우에는 y를 굳이 계산하지 않아요.

이 코드에서는 is_double[1]이 FALSE라면 is_double[2]나 is_double[3]를 평가할 필요가 없으므로, &를 &&로 바꾸면 속도를 조금 높일 수 있어요.

유의할 점은 &&는 길이가 1인 논리값, 즉 단일 논리값(예: if 조건에 넘기는 값)에서만 동작한다는 것이고, &는 길이가 1보다 큰 논리 벡터에도 동작한다는 점이에요.

지침

100 XP
  1. &&를 사용한다는 점만 제외하고 move()와 유사한 improved_move() 함수를 만드세요.
  2. microbenchmark()를 사용해 이전 버전인 move()와 improved_move()의 성능을 비교하세요.