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

cbind

Kombinování R objektů podle řádků nebo sloupců

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

Popis

Funkce vezme řadu vektorů, metic či datových tabulek a zkombinuje je po řádcích či sloupcích. Jedná se generické funkce s metodami pro mnohé třídy R.

Použití

cbind(..., deparse.level = 1)
rbind(..., deparse.level = 1)
## S3 metoda pro třídu 'data.frame'
rbind(..., deparse.level = 1, make.row.names = TRUE, stringsAsFactors = default.stringsAsFactors())

Argumenty

...

(obecně) vektory nebo matice. Můžou být zadány jako jmenné argumenty. Ostatní R mohou být vhodně převedeny nebo mohou být použity S4 metody: viz sekce ‘Detaily’ a ‘Hodnota’. (Pro metodu "data.frame" od funkce cbind to mohou být další argumenty vkládány do funkce data.frame, jako například stringsAsFactors.)

deparse.level

celé číslo, kterým lze ovlivnit utváření štítků v případě argumentů nematicové struktury:
deparse.level = 0 nevytváří žádné štítky; výchozí nastavení,
deparse.level = 1 nebo 2 vytváří štítky z názvů argumentů, viz sekce ‘Hodnota’.

make.row.names

(pouze pro "data.frame" metodu:) logický argument, který udává, zda mají být z uvedených argumentů vytvořeny jedinečné a platné názvy řádků.

stringsAsFactors

logický argument, který se vkládá to funkce as.data.frame; má význam pouze, pokud argumenty v ... obsahují datový typ charakter (jiné struktury než data.frame).

Detaily

Funkce cbind a rbind jsou generické S3 funkce, s metodami pro datové tabulky. Tyto metody jsou použity vždy, když je alespoň jeden z argumentů datová tabulka a zbytek matice či vektory. Jsou zde i další metody; zejména metoda pro objekty typu časových řadT. Viz sekce ‘Vysílání metodh’ pro informaci, jak jsou vybírány patřičné metody, které jsou následně použity. Pokud je některý z argumentů třídy S4, tedy isS4(.) nabývá pravdivé hodnoty, jsou vyhledány metody S4, a mohou být volány skryté funkce cbind / rbind z balíku methods, které jsou založené na cbind2, respektive rbind2. I v tomto případě se funkce řídí nastavenou úrovní deparse.level.

U vchozí metody musí být všechny vektory/matice buďto atomické, nebo seznamy. Výrazy nejsou povoleny. Objekty jazyka (jako například vzorce či volání) nebo párové seznamy budou převedeny na seznamy: ostatní objekty (např. názvy nebo externí ukazatelé) budou zahrnuty ve výsledném seznamu jako prvky. Všechny třídy, které jsou na vstupu, budou vymazány (zejména pak faktory jsou nahrazeny svými vnitřními kódy).

Pokud se vyskytne více argumentů se strukturrou matice, musí mít všechny stejný počet sloupců (nebo řádků), který zároveň bude počtem sloupců (nebo řádků) výsledku. Pokud jsou všechny argumenty vektory, je počet sloupců (řádků) výsledku roven délce nejdelšího vektoru. Hodnoty z kretších vektorů se tím pádem opakují, aby se délka daného vektoru rovna délce nejdelšího (s varovným hlášením warning, pokud k opakování dojde pouze u části prvků).

Pokud je mezi argumenty kombinace matic a vektorů, je počet sloupců (řádků) výsledku určen na základě počtu sloupců (řádků) argumentů struktury matice. U všech vektorů pak dojde buď k opakování hodnot, nebo k začlenění hodnot do podmožin, aby se u nich dosáhlo požadované délky.

Funkce cbind (rbind) ignoruje vektory o nulové délce (zahrnuje i NULL), pokud počet sloupců (řádků) výsledku je větší než nula (z důvodu S kompatibility). (Matice s přidanými nulami se v S3 nevyskytují a jsou v R ignorovány.)

Počet sloupců a řásků matic je omezena na méně než 2^31 i v 64-bitovém systému. Také vektory mají stejné omezení na svoji délku. Od verze R 3.2.0 mohou matice na vstupu obsahovat i více prvků (ovšem musí být dodrženo omezení na počet řádků a sloupců).

Hodnota

U výchozí metody je to matice, která vznikla kombinováním argumentů v ... podle řádků nebo sloupců. (Výjimka: pokud není uveden žádný vstup, nebo jsou všechny vstupy NULL, pak je i výsledná hodnota NULL.)

Typ matice je určen datovým typem vstupu, který je nejvýše této hierarchii: raw < logical < integer < double < complex < character < list.

U cbind (rbind) jsou názvy sloupců (řádků) brány z colnames (rownames) argumentů, které mají strukturu matice. V jiných případech se tyto názvy berou z názvů argumentů, nebo převedením výrazu na řetězec znaků, je-li nastaveno deparse.level > 0 a nejsou zmíněné názvy uvedeny. U deparse.level = 1 dochází k tomuto převodu pouze, pokud je výsledkem smysluplný název (‘symbol’, viz is.symbol).

U cbind jsou názvy řádků ve výsledku převzaty od prvního vhodného argumentu: názvy řádků u matice, nebo názvy od vektoru délky, která odpovídá počtu řádků výsledku.

U rbind jsou názvy sloupců ve výsledku převzaty od prvního vhodného argumentu: názvy sloupců u matice, nebo názvy od vektoru délky, která odpovídá počtu sloupců výsledku.

Metody pro datové tabulky

Metoda "data.frame" k cbind je vlastně obalovač pro funkci data.frame(..., check.names = FALSE). Znamená to, že dojde k rozdělení matice sloupců u argumentů typu datová tabulka a sloupce řetězců se převedou na faktory, pokud není specifikováno stringsAsFactors = FALSE.

Metoda "data.frame" k rbind nejprve vyřadí všechny argumenty bez řádků či sloupců (pokud žádný nezbude, je navrácen první argument se sloupcema, nebo datová tabulka bez sloupců a řádků). Pak jsou vzaty třídy sloupců první datové tabulky a následně jsou sloupce k sobě přiřazeny podle názvu (je to lepší než podle pozice). U faktorů se úrovně rozšíří dle potřeby a výsledkem je uspořádaný faktor, pokud všechny komponenty byly rovněž uspořádané faktory.

Vysílání metod

Vysílání metod neprobíhá prostřednictvím UseMethod(), ale c-vnitřním vysíláním. Z toho důvodu není potřeba například rbind.default.

Vysílací algoritmus je popsán ve zdrojovém souboru (‘.../src/main/bind.c’) a skládá se z následujícíh kroků:

  1. Pro každý argument dostaneme seznam možných tříd, ke kterým může patřit.

  2. Dále je každá třída prověřena, zda pro ni máme odpovídající metodu.

  3. Pokud najdeme vhodnou metodu, ujistíme se, že je shodná pro všechny dřívější argumenty. Shoduje-li se, použijeme ji, v opačném případě se vrátíme k výchozímu kódu.

Pokud chceme kombinovat jiné objekty s datovou tabulkou, může být nezbytné provést nejprve jejich převod na datové tabulky. (Tento algoritmus může vést k volání metody "data.frame", pokud jsou všechny argumenty datové tabulky nebo vektory, a výsledkem bude převod vektorů řetězců na faktory.)

Reference

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

Příklady

m <- cbind(1, 1:7) # '1' (= kraší vektor) bude opakována
m
m <- cbind(m, 8:14)[, c(1, 3, 2)] # vložení sloupce
m
cbind(1:7, diag(3)) # vektor je podmnožinou -> varovné hlášení

cbind(0, rbind(1, 1:3))
cbind(I = 0, X = rbind(a = 1, b = 1:3)) # používání názvů
xx <- data.frame(I = rep(0,2))
cbind(xx, X = rbind(a = 1, b = 1:3)) # názvy jinak

cbind(0, matrix(1, nrow = 0, ncol = 4)) #> varování (dává symsl)
dim(cbind(0, matrix(1, nrow = 2, ncol = 0))) #-> 2 x 1

## deparse.level
dd <- 10
rbind(1:4, c = 2, "a++" = 10, dd, deparse.level = 0) # 2 názvy řádků uprostřed
rbind(1:4, c = 2, "a++" = 10, dd, deparse.level = 1) # 3 názvy (default)
rbind(1:4, c = 2, "a++" = 10, dd, deparse.level = 2) # 4 názvy

## názvy řádků:
b0 <- gl(3,4, labels=letters[1:3])
bf <- setNames(b0, paste0("o", seq_along(b0)))
df <- data.frame(a = 1, B = b0, f = gl(4,3))
df. <- data.frame(a = 1, B = bf, f = gl(4,3))
new <- data.frame(a = 8, B ="B", f = "1")
(df1 <- rbind(df , new))
(df.1 <- rbind(df., new))
stopifnot(identical(df1, rbind(df, new, make.row.names=FALSE)),
identical(df1, rbind(df., new, make.row.names=FALSE)))

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