2011-10-31 25 views
6

thể trùng lặp:
R: subset() logical-and operator for chaining conditions should be & not &&Sự khác nhau giữa các dạng toán tử AND, OR dài (&&, ||) của AND, HOẶC các toán tử logic trong R là gì?

sự khác biệt giữa ngắn (&, |) và dài (&&, ||) hình thức AND, OR toán tử logic trong R là gì?

Ví dụ:

  1. x==0 & y==1
  2. x==0 && y==1
  3. x==0 | y==1
  4. x==0 || y==1

tôi luôn luôn sử dụng các hình thức ngắn trong mã của tôi. Nó có bất kỳ điểm chấp nào không?

Trả lời

6

&| - là yếu tố khôn ngoan và có thể được sử dụng với các hoạt động vector, trong khi đó, ||&& luôn tạo đơn TRUE hoặc FALSE

theck sự khác biệt:

> x <- 1:5 
> y <- 5:1 
> (x > 2) & (y < 3) 
    [1] FALSE FALSE FALSE TRUE TRUE 
> (x > 2) && (y < 3) # here operaand && takes only 1'st elements from logical 
        # vectors (x>2) and (y<3) 
> FALSE 

Vì vậy, &&|| thường được sử dụng trong các tuyên bố if (condition) state_1 else state_2, như xử lý vectơ có độ dài 1

+0

Có lẽ sẽ hữu ích khi thêm rằng ´ || ´and ´ && ´ được ưu tiên nếu mệnh đề chỉ khi giá trị đầu tiên được sử dụng. –

+3

@lselzer ... vì '||' và '&&' * ngắn mạch *, tức là chúng không kiểm tra các mệnh đề tiếp theo một cách không cần thiết. tức là 'A || B || C' dừng đánh giá và trả về 'TRUE' ngay khi nó tìm thấy phần tử' TRUE', trong khi 'A && B && C' ngừng đánh giá và trả về' FALSE' ngay sau khi nó tìm thấy phần tử 'FALSE' ... đây là hữu ích trong các cấu trúc như 'if (! is.na (x) && x> 0)' ... –

+0

@Max, một điểm tinh tế, nhưng '&&' không phải lúc nào cũng trả về 'TRUE' hoặc' FALSE'. Xem xét 'TRUE && NA', trả về' NA'. – nograpes

Các vấn đề liên quan