Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyCvičebnice jazyka R Dokumentace k základním funkcím factor

factor

Factor

factor {base} Dokumentace R v češtině

Popis

Funkce factor převede vektor na faktor (pojmy jako ‘kategorie’ and ‘výčtový typ’ jsou také u faktorů používány). Má-li argument ordered hodnotu TRUE, jsou faktorové úrovně seřazeny. Pro kompatibilitu s S je zde funkce ordered.

is.factor, is.ordered, as.factor a as.ordered jsou funkce sloužící k ověřování náležitosti k dané třídě či k převodu do dané třídy.

Použití

factor(x = character(), levels, labels = levels,
exclude = NA, ordered = is.ordered(x), nmax = NA)
ordered(x, ...)
is.factor(x)
is.ordered(x)
as.factor(x)
as.ordered(x)
addNA(x, ifany = FALSE)

Argumenty

x

vektor dat, obvykle obsahuje malý počet zřetelně odlišných hodnot values.

levels

nepovinný vektor, který obsahuje všechny honoty (jako řetězce znaků), které může x nabývat. Jako výchozí se bere množina hodnot, které navrátí funkce as.character(x), a jsou uspořádány vzestupně podle x. Pozor, tato množina může být menší než sort(unique(x)).

labels

buď nepovinný vektor řetězců obsahující štítky pro jednotlivé faktorové úrovně, které má být použito na výstupu (musí být vložen se stejným poředím jako argument levels po odstranění hodnot uvedených v exclude), nebo řetězec znaků o délce 1. Hodnoty, které se v labels opakují, mohou být použity k přiřazení různých x pod stejnou faktorovou úroveň.

exclude

vektor hodnot, které mají být vyloučeny při vytváření množiny úrovní. Může být faktor se stejnou množinou úrovní jako x, nebo vektor typu character.

ordered

logický příznak, který umožňuje zvolit, zda má být na úrovně pohlíženo jako na seřazené (v určitém pořadí).

nmax

horní hranice pro počet úrovní; viz ‘Detaily’.

...

(u ordered(.)): jakýkoliv výše zmíněný argument, kromě samotného ordered.

ifany

pouze přidává úroveň NA, je-li použita, tzn. pokud je pravdivé any(is.na(x)).

Detaily

Na datové typy vektoru x se nevztahuje žádné omzení; jediné, co musí mít, je odpovídající metodu as.character a musí být tříditelný (pomocí order).

Ačkoliv se uspořádané faktory od faktorů odlišují pouze ve své třídě, zacházení s těmito třídami se poměrně liší u nejrůznějších metod a funkcí používaných k fitování modelů.

Zpracování vektoru probíhán následujícím způsobem: nejdříve dojde k odstranění všech hodnot z levels, které jsou uvedené v exclude. Pokud je hodnota prvku x[i] rovna levels[j], pak je i-tý prvek výsledku j. Pokud není nalezena žádná shoda s x[i] v levels (typicky se tak stane u odstraněných hodnot), pak je i-tý prvek výsledku navrácen jako NA.

Za normálních okolností jsou ‘úrovně’, coby vlastnost výsledku, množinou všech původních úrovní po odstranění těch, které jsou uvedené v exclude, ovšem situace může být jiná, je-li poskytnut argument labels. V takovém případě jsou úrovněmi výsledku buďto nové štítky úrovní, nebo řetězec znaků, přičemž jednotlivé úrovně jsou označeny příslušným řetězcem s přidaným pořadovým číslem.

factor(x, exclude = NULL), použité u faktoru bez NA, nepovede k žádné operaci pouze v případě, že se mezi úrovněmi nenacházejí nepoužité úrovně. Pokud ano, bude navrácen faktor s redukovanou množinou úrovní. Pokud je argument exclude použitý, pak od verze R 3.4.0 platí, že vyřazení neexistujících úrovní je ekvivalentní žádnému vyřazení, a pokud je exclude vektor řetězců, je použitý na úrovně x. exclude může být případně i faktor se stejnou množinou úrovní jako x. Dojde tak k vyřazení úrovní přítomných v exclude.

Faktor může obsahovat NA. Pro x typu numeric, nastavte exclude = NULL, aby se z NA stala další úroveň (zobrazená jako <NA>); dle výchozího nastavení se jedná o poslední úroveň.

Pokud je NA úrovní, pak způsob, jakým se dá nastavit kód chybějící hodnoty (což je protiklad kódu chybějící úrovně), je použití is.na na levé straně přiřazení (jako v is.na(f)[i] <- TRUE; indexování uvnitř is.na nefunguje). Za takových podmínek jsou chybějící hodnoty zobrazeny stejně jako chybějící úroveň, tedy <NA>.

is.factor je generická funkce: můžete tedy vytvářet metody pro specifické třídy objektů.

Tam, kde není poskytnut argumentlevels, je volána funkce unique. Jelikož faktory typicky mívají malý počet úrovní, je u velkých vektorů x užitečné zadat nmax coby horní hranici pro počet jedinečných hodnot.

Hodnota

factor navrací objekt třídy "factor", která obsahuje množinu celočíselných kódů délky x s vlastností "levels" typu character, a jedinečné vstupní hodnoty. Pokud je pravdivý argument ordered (nebo je použito ordered()), má výsledek třídu c("ordered", "factor"). factor(x) pozbývá veškeré vlastnosti x kromě "names", a nastavuje nově "levels" a "class".

Použití funkce factor u seřazených či neseřazených faktorů povede k navrácení faktoru (stejného typu) pouze s úrovněmi, které se v něm skutečně vyskytují.

is.factor navrací TRUE nebo FALSE v závislosti na tom, zda je argument třídy faktor či ne. Obdobně pak is.ordered navrací TRUE, když je její argument uspořádáný faktor a FALSE v případě, že není.

as.factor převádí svůj argument na faktor. Jedná se o zkrácenou verzí (někdy i rychlejší) funkce factor.

as.ordered(x) navrací x, pokud je seřazené. V ostatních případech se použije ordered(x).

addNA modifikuje faktor převedením hodnoty NA do množiny úrovní (tedy NA hodnoty jsou počítány v tabulkách, například).

.valid.factor(object) kontroluje platnost faktoru, momentálně pouze levels(object), a navrátí TRUE, pokud je vše platné. V opačném případě řetězec popisující problém. Tato funkce se používá pro validObject(<factor>).

Varování

Interpretace faktoru závisí na obojím, tedy jak na samotných kódech, tak na vlastnosti "levels". Dávejte si proto pozor, abyste porovnávali pouze faktory se stejnou množinou úrovní (ve stejném pořadí). Především je bezvýznamné používat u faktoru funkci as.numeric, které může vést k implicitnímu převedení. K transformaci faktoru f do jeho zhruba původních číselných hodnot je doporučeno použít as.numeric(levels(f))[f]. Je to i více efektivní než as.numeric(as.character(f)).

Úrovně faktoru jsou dle výchozího nastavení seřazeny, ovšem pořadí závisí na místním nastavení v době vzniku faktoru, a nemělo by se automaticky pedpokládat ASCII.

U používání NA jako úrovně může dojít k určitým obtížím. Je proto doporučenou této možnosti využívat pouze při zanášení dat do tabulky.

Operátory ke srovnávání a skupinové generické metody

Existují metody "factor" a "ordered" pro group generic funkci Ops, které poskytují metody pro operátory k Comparison, dále pro min, max a generickou funkci range v Summary funkce "ordered". (Zbytek skupin a skupina Math hlásí chybu, neboť nemají pro faktory žádný význam.)

Pouze == a != může být použito u faktorů: faktor může být porovnán pouze s dalším faktorem se stejnou množinou úrovní (není nezbytné stejné pořadí) nebo s vektorem řetězců. Uspořádané faktory jsou porovnávány steným způsobem, ovšem porovnání uspořádaných a neuspořádaných faktorů není umožněno.

Všechny operátory ke srovnávání jsou k dispozici pro uspořádané faktory. Řazení je provedeno podle úrovní operandů: pokud jsou oba operandy uspořádané faktory, musí mýt stejnou množinu úrovní.

Poznámka

Ve starších verzích R mělo přechovávání dat řetězců coby faktory větší nároky na místo i v případě, že data obsahovala pouze malé množství opakujících se hodnot. Dnes jsou nároky na místo srovnatelné. (Hodnoty typu integer jsou ukládány ve 4 bajtech, zatímco každý odkaz na řetězec znaků potřebuje ukazatel velikosti 4 nebo 8 bajtů.)

Reference

Chambers, J. M. and Hastie, T. J. (1992) Statistical Models in S. Wadsworth & Brooks/Cole.

Příklady

(ff <- factor(substring("statistics", 1:10, 1:10), levels = letters))
as.integer(ff) # vnitřní kódy
(f. <- factor(ff)) # vypuštění úrovní, které se nevyskytují
ff[, drop = TRUE] # stejné, více přehledné

factor(letters[1:20], labels = "letter")

class(ordered(4:1)) # "ordered", děděné z "factor"
z <- factor(LETTERS[3:1], ordered = TRUE)
## jak pracují "příbuzné" metody:
stopifnot(sort(z)[c(1,3)] == range(z), min(z) < max(z))

## pokud chcete "NA" jako úroveň a zároveň povolit chybějící hodnoty
(x <- factor(c(1, 2, NA), exclude = NULL))
is.na(x)[2] <- TRUE
x # [1] 1 <NA> <NA>
is.na(x)
# [1] FALSE TRUE FALSE

## Od verze R 3.4.0 lze také takto :
factor(c(1:2, NA), exclude = "" ) # chová všechny <NA> jako
factor(c(1:2, NA), exclude = NULL)
## exclude = <character>
z # uspořádané ůrovně 'A < B < C'
factor(z, exclude = "C") # vyloučí C
factor(z, exclude = "B") #

## Štítky se mohou opakovat:
## factor() s opakujícími se štítky, což umožňuje "spojení urovní"
x <- c("Man", "Male", "Man", "Lady", "Female")
## Od 4 různých hodnot ke dvěma úrovním:
(xf <- factor(x, levels = c("Male", "Man" , "Lady", "Female"),
labels = c("Male", "Male", "Female", "Female")))
#> [1] Male Male Male Female Female
#> Levels: Male Female

## Používání addNA()
Month <- airquality$Month
table(addNA(Month))
table(addNA(Month, ifany = TRUE))

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity