Které indexy jsou TRUE?
Popis
Vrací pravdivé TRUE indexy logického objektu, včetně indexů polí.
Použití
which(x, arr.ind = FALSE, useNames = TRUE)
arrayInd(ind, .dim, .dimnames = NULL, useNames = FALSE)
Argumenty
x |
vektor nebo pole typu logical . Hodnoty NA jsou povolené a vynechané (funkce pro ně vrací hodnotu jako pro FALSE ). |
arr.ind |
logická hodnota; mají být indexy vráceny ve formě pole, pokud je x pole? |
ind |
celočíselný indexový vektor, ve formě výsledku z which(x) , který udává pozice indexů v poli. |
.dim |
celočíselný vektor dimenzí pole ve formě výsledku funkce dim (.). |
.dimnames |
volitelný seznam (list) ve formě výsledku funkce dimnames (.). Pokud je useNames rovno TRUE , je tento seznam využit pro konstrukci dimnames v rámci funkce arrayInd() (a tedy which(*, arr.ind=TRUE) ). Pokud není names (.dimnames) prázdné, jsou tyto názvy použity jako názvy sloupců. .dimnames[[1]] jsou užity jako názvy řádků. |
useNames |
logická hodnota určující, zda má hodnota arrayInd() vůbec mít (neprázdná) dimnames . |
Hodnota
Pokud arr.ind == FALSE (základní nastavení), celočíselný vektor s length rovnou sum(x) , tj. počtu hodnot TRUE v x ; jednoduše řečeno, výsledek je (1:length(x))[x] .
Pokud arr.ind == TRUE a x je pole (array ) (tj. má atribut dim ), je výsledek arrayInd(which(x), dim(x), dimnames(x)) , tj. matice, jejíž každý řádek je tvořen indexy jednoho prvku z x ; viz příklady níže.
Poznámka
Na rozdíl od většiny ostatních základních funkcí v R si tato funkce nevynutí převedení x na typ logical : akceptovány jsou pouze argumenty s typeof rovným logical a ostatní vrací error.
Autoři
Werner Stahel a Peter Holzer (ETH Zurich) navrhli variantu arr.ind .
Viz také
Logic , which.min pro index minima či maxima and match pro první index prvku ve vektoru (tj. pro skalár a je match(a,x) ekvivalentní s min(which(x == a)) avšak výrazně efektivnější.
Příklady
which(LETTERS == "R")
which(ll <- c(TRUE, FALSE, TRUE, NA, FALSE, FALSE, TRUE)) #> 1 3 7
names(ll) <- letters[seq(ll)]
which(ll)
which((1:12)%%2 == 0) # ktere jsou sude?
which(1:10 > 3, arr.ind = TRUE)
( m <- matrix(1:12, 3, 4) )
div.3 <- m %% 3 == 0
which(div.3)
which(div.3, arr.ind = TRUE)
rownames(m) <- paste("Case", 1:3, sep = "_")
which(m %% 5 == 0, arr.ind = TRUE)
dim(m) <- c(2, 2, 3); m
which(div.3, arr.ind = FALSE)
which(div.3, arr.ind = TRUE)
vm <- c(m)
dim(vm) <- length(vm) #-- vtipna vec s length(dim(...)) == 1
which(div.3, arr.ind = TRUE)
|