&
Logické operátory
Logic {base} | Dokumentace R v češtině |
Popis
Tyto operátory lze použít u vektorů typu logical, raw a numeric.
Použití
! x
x & y
x && y
x | y
x || y
xor(x, y)
isTRUE (x)
isFALSE(x)
Argumenty
x, y |
vektor typu raw, logical, numeric (tj. double, integer nebo complex) nebo objekty, for které byly vytvořeny příslušné metody. |
Detaily
!
značí logickou negaci.
&
a &&
značí logické A, |
a ||
se používá pro logické NEBO. Kratší verze provádí porovnání mezi všemi prvky, obdobně jako aritmetické operátory. Delší verze hodnotí pouze první prvek vektoru na levé straně vůči tomu na pravé. Vyhodnocování trvá, dokud není nalezen výsledek. Delší verze operátorů jsou vhodnější pro programování strukturovaných příkazů a typicky preferované u klauzulí if
clauses.
xor
značí operátor výhrady NEBO pro použití u všech prvků vektorů.
isTRUE(x)
je stejné jako { is.logical(x) && length(x) == 1 && !is.na(x) && x }
; analogicky je definovánoisFALSE()
. Následkem toho může být vhodnjěší if(isTRUE(cond))
než if(cond)
kvůli hodnotám NA
s.
Ve starších verzích R, mělo isTRUE <- function(x) identical(x, TRUE)
nevýhodu, že bylo nepravdivé např. u x <- c(val = TRUE)
.
Vektory typu numeric a complex budou převedeny na typ logical, kde nula bude znamenat nepravda a ostatní nenulové hodnoty pravda. Raw vektory jsou zpracovány bez převodu pro operátory !
, &
, |
a xor
, které jsou v tomto případě uplatněný pro všechny bity (tedy !
tvoří inverzní kód).
Operátory !
, &
a |
jsou generické funkce: metody mohou být k nim vytvořeny individuálně či cestou skupinové generické funkce Ops
(nebo S4 Logic
, viz níže).
Hodnota NA
je platný logický objekt. Může být součástí x
nebo y
. V případě NA & TRUE
je výsledek NA
, ovšem v případě NA & FALSE
je výsledkem FALSE
. Viz příklad dole.
Viz Syntax pro prioritu těchto operátorů: na rozdíl od ostatních jazyků (včetně S) operátory A, NEBO nemají stejnou prioritu (operátor A má vyšší prioritu než operátor NEBO).
Hodnota
U !
je to vektor typu logical nebo raw (pro x
typu raw) stejné délky jako x
: názvy, dimenze a dimnames jsou převzaty z x
stejně tak jako všechny další vlastnosti (včetně třídy), není-li udělán převod.
U |
, &
a xor
je to vektor typu logical a raw. Pokud je poskytnutý vektor o délce nula, je také nulový i vektor ve výsledku. V ostatních případech jsou prvky krátšího vektoru používány znovu dle potřebys varováním, jdou-li použity znovu frakcionovaně). Pravidla pro nalezení vlastností výsledku jsou poněkud komplikovaná. Většina vlastností je převzatých z delšího vektoru, v případě stejné délky z prvního. Názvy jsou kopírovány z prvního vektoru, pokud má stejnou délku jako výsledek, v opačném případě z druhého vektoru. U časových řad jsou operátory povoleny pouze, pokud jsou řady kompatibilní, kdy vlastnosti třída a tsp
jsou převzaty z kterékoliv série. Pro pole ( a výsledky se strukturou pole)jsou dimenze a dimnames brány z prvního argumentu, má-li strukturu pole, v opačném případě ze druhého.
U ||
, &&
a isTRUE
je logický vektor velikosti jedna.
S4 metody
!
, &
a |
jsou generické S4 funkce, poslední dvě jsou součástí skupinově generických funkcí Logic
(a tedy jsou pro tyto metody potřebné názvy argumentů e1, e2
).
Poznámka
Operátory pro všechny prvky jsou někdy nazývané funkcemi, např. `&`(x, y)
: viz popis, jak je provedeno srovnání mezi argumenty v Ops
.
Reference
Becker, R. A., Chambers, J. M. a Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
Viz také
any
a all
pro NEBO a A opeátory na více skalárních argumentech.
Syntax
pro prioritu operátoru.
bitwAnd
pro práci se všemi bity u vektoru typu integer.
Příklady
y <- 1 + (x <- stats::rpois(50, lambda = 1.5) / 4 - 1)
x[(x > 0) & (x < 1)] # všechny hodnoty x mezi 0 a 1
if (any(x == 0) || any(y == 0)) "zero encountered"
## sestavení pravdivostních tabulek:
x <- c(NA, FALSE, TRUE)
names(x) <- as.character(x)
outer(x, x, "&") ## tabulka A
outer(x, x, "|") ## tabulka NEBO