Ở phút 15:33 trong bài LOGICAL
VECTOR https://www.tuhocr.com/r-courses/coding-in-r thì
mình có test cách hoạt động của toán tử logic AND 1 dấu
& so với 2 dấu &&, tương tự cho
toán tử logic OR 1 dấu | so với 2 dấu
||, tuy nhiên hiện tại có một số thay đổi như
sau.
Hoạt động OK
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Hoạt động KHÔNG ĐƯỢC
## Error in x && y: 'length = 7' in coercion to 'logical(1)'
## Error in x || y: 'length = 7' in coercion to 'logical(1)'
Nguyên nhân là toán tử logic với 2
dấu && (AND) và 2 dấu || (OR) chỉ dùng
để so sánh giữa hai vector đơn (tức là hai vector có chiều dài là 1, chỉ
chứa 1 thành phần). Đây là update từ phiên bản R 4.3.0. Việc này giúp
đảm bảo tính chặt chẽ của các lệnh logic. Cụ thể là:
https://cran.r-project.org/doc/manuals/r-release/NEWS.html
## [1] TRUE
## [1] TRUE
## [1] TRUE TRUE TRUE TRUE
## Error in a && c: 'length = 4' in coercion to 'logical(1)'
## [1] TRUE
## [1] TRUE
## [1] TRUE TRUE TRUE TRUE
## [1] TRUE
Khi nào sử dụng toán tử logic theo kiểu 1 dấu
& hay là kiểu 2 dấu
&&?
Thực tế là nếu bạn dùng toán tử
logic kiểu 1 dấu & hay | là áp dụng được
cho tất cả các trường hợp thực hiện so sánh logical trong R. Còn nếu
muốn kỹ hơn trong lệnh if-else vốn nghiêm ngặt yêu cầu chỉ
có 1 kết quả TRUE hay FALSE thì cần dùng toán
tử logic kiểu 2 dấu && hay || để đảm
bảo quá trình so sánh được chặt chẽ.
&and&&indicate logicalANDand|and||indicate logicalOR.The shorter forms performs elementwise comparisons in much the same way as arithmetic operators.
The longer forms evaluates left to right, proceeding only until the result is determined.
The longer form is appropriate for programming control-flow and typically preferred in
if clauses.Using vectors of more than one element in
&&or||will give an error.