(IV) Funkcja scale()

Funkcja scale() służy do skalowania kolumn macierzy – to znaczy do wyśrodkowania kolumny do określonego środka i skalowania kolumny do określonego odchylenia standardowego. Funkcja scale () przyjmuje trzy argumenty: x, center i scale. Argument x jest macierzą lub obiektem numerycznym podobnym do macierzy (na przykład ramką danych lub szeregiem czasowym).

Argument center może być wektorem logicznym lub liczbowym o długości równej liczbie kolumn w x. Jeśli jest ustawiony na TRUE, średnia z kolumny jest odejmowana od każdego elementu w kolumnie. Jeśli jest ustawiony na wektor liczb, każda liczba jest odejmowana od elementów w odpowiedniej kolumnie liczby. Jeśli ustawione na FALSE, nic nie jest odejmowane. Wartość domyślna to TRUE. Argument scale może być również logiczny lub wektorem liczb. Jeśli skala jest ustawiona na TRUE, każdy wyśrodkowany element (jeśli wykonano centrowanie) jest dzielony przez odchylenie standardowe elementów w kolumnie, gdzie NA są ignorowane, a dzielenie następuje przez n-1. Jeśli ustawione na równe wektorze liczb, każdy (wyśrodkowany) element kolumny jest dzielony przez odpowiednią liczbę w wektorze. Dzielenie przez zero da NaN, ale nie zatrzyma wykonania. Jeśli skala jest ustawiona na FALSE, podział nie jest wykonywany. Wartość domyślna to TRUE. Oto przykład:

> d.mat = matrix(1:8,2,4)

> d.mat

[,1] [,2] [,3] [,4]

[1,] 1 3 5 7

[2,] 2 4 6 8

> scale(d.mat)

[,1] [,2] [,3] [,4]

[1,] -0.7071068 -0.7071068 -0.7071068 -0.7071068

[2,] 0.7071068 0.7071068 0.7071068 0.7071068

attr(,”scaled:center”)

[1] 1.5 3.5 5.5 7.5

attr(,”scaled:scale”)

[1] 0.7071068 0.7071068 0.7071068 0.7071068

> e.mat = matrix(c(1:8,NA,2),2,5)

> e.mat

[,1] [,2] [,3] [,4] [,5]

[1,] 1 3 5 7 NA

[2,] 2 4 6 8 2

> scale(e.mat, center=rep(3,5), scale=rep(4,5))

[,1] [,2] [,3] [,4] [,5]

[1,] -0.50 0.00 0.50 1.00 NA

[2,] -0.25 0.25 0.75 1.25 -0.25

attr(,”scaled:center”)

[1] 3 3 3 3 3

attr(,”scaled:scale”)

[1] 4 4 4 4 4

Zwróć uwagę, że funkcja scale() zwraca skalowaną macierz, wartości użyte do wyśrodkowania elementów oraz wartości użyte do skalowania elementów. Aby uzyskać więcej informacji, wprowadź ?scale w wierszu polecenia R.

(IV) Funkcja sweep()

Funkcja sweep() przyjmuje argumenty x, MARGIN, STATS, FUN, check.margin i. . .. Argument x jest tablicą. Tablica może mieć dowolny tryb atomowy. Argument MARGINES podaje marginesy, na których ma nastąpić przeciągnięcie. W przypadku macierzy MARGIN jest równy 1, 2 lub 1: 2 (lub c (1,2)). Jeśli MARGINES jest równy 1: 2, cała macierz jest przeszukiwana, a nie przeciąganie według kolumny lub wiersza. Więcej niż dwa wymiary, MARGIN może być dowolnym podzbiorem marginesów, w tym wszystkimi marginesami. Argument STATS podaje wartości do przeszukania. Na przykład użycie kolumny oznacza, że ​​można zastosować funkcję apply (); to znaczy apply (mat, 2, mean) działałoby jako wartość dla STATS, gdzie mat jest wyciąganą macierzą. Wartości cyklu STATS. Argument FUN jest funkcją, której należy użyć. Domyślnie FUN równa się „-”, operatorowi odejmowania, ale FUN może być dowolną funkcją dozwoloną dla wartości tablicy. Na przykład wklej można używać z tablicami znaków trybu. Argument check.margin sprawdza, czy wymiary lub długość STATS zgadzają się z wymiarami podanymi przez MARGIN. Jeśli nie, to tylko ostrzeżenie. Funkcja nie zatrzymuje się, ale zmienia wartości w STATS. Wartość domyślna to TRUE.

Argument. . . daje dodatkowe argumenty funkcji FUN. Oto przykład:

> d.mat = matrix (1: 8,2,4)

> d.mat

[, 1] [, 2] [, 3] [, 4]

[1,] 1 3 5 7

[2,] 2 4 6 8

> a = sweep (d.mat, 2, apply (d.mat, 2, mean))

> a

[, 1] [, 2] [, 3] [, 4]

[1,] -0,5 -0,5 -0,5 -0,5

[2,] 0,5 0,5 0,5 0,5

> sweep (a, 2, apply (d.mat, 2, sd), „/”)

[, 1] [, 2] [, 3] [, 4]

[1,] -0,7071068 -0,7071068 -0,7071068 -0,7071068

[2,] 0,7071068 0,7071068 0,7071068 0,7071068

Ponieważ MARGIN jest ustawiony na 2, funkcja mean() przyjmuje średnią z każdej kolumny, a funkcja sd() przyjmuje odchylenie standardowe każdej kolumny. W drugim stwierdzeniu średnia z każdej kolumny jest odejmowana od elementów w kolumnie. Funkcja odejmowania jest funkcją domyślną, więc nie trzeba jej wprowadzać. W trzecim zdaniu wyśrodkowane elementy w kolumnach są podzielone przez standardowe odchylenia dla kolumn. Zauważ, że funkcja zwraca macierz. Więcej informacji na temat sweep() można znaleźć, wpisując ?sweep po znaku zachęty R.

(IV) Funkcje sweep() i scale()

Funkcja sweep() działa na tablicach (w tym macierzach i wektorach, które zostały przekształcone w macierze), a funkcja scale() działa na obiektach numerycznych podobnych do macierzy. Funkcja sweep() usuwa margines (y) tablicy (powiedzmy, kolumny macierzy) z wartościami (powiedzmy, średnie kolumnowe) za pomocą funkcji (powiedzmy, operatora odejmowania). Funkcja scale() domyślnie centruje i normalizuje kolumny macierzy, odejmując średnią i dzieląc przez odchylenie standardowe dla każdej kolumny

(IV) Funkcja mapply()

Funkcja mapply() przyjmuje obiekt będący wektorem lub listą jako argument i stosuje funkcję do każdego elementu wektora lub listy. Jeśli zostanie wprowadzony obiekt, który nie jest wektorem ani listą, funkcja mapply() spróbuje przekształcić obiekt w wektor lub listę. Elementy obiektu wynikowego muszą być zgodne z prawem, aby funkcja mogła zostać zastosowana. Wynikiem funkcji mapply() jest wektor, macierz lub lista. Argumentami do mapply() są FUN, . . .  , MoreArgs, SIMPLIFY i USE.NAMES. Argument FUN to funkcja, którą należy zastosować. Argument. . . odnosi się do wektorów lub listy, na których działa argument FUN i mogą być zbiorem list i / lub wektorów zebranych przy użyciu c(). Argument MoreArgs odnosi się do wszelkich dodatkowych argumentów FUN i domyślnie jest równy NULL. Argumenty muszą być w trybie listy, z oddzielną listą dla każdego argumentu. Argument SIMPLIFY nakazuje mapply() próbę uproszczenia wyniku do wektora lub macierzy. Wartość domyślna to TRUE. Argument USE.NAMES mówi mapply(), aby używała nazw elementów lub, jeśli wektor jest typu mode character, samych znaków jako nazw danych wyjściowych. Wartość domyślna to PRAWDA. Oto przykład:

> set.seed(382765)

> a.mat = matrix(1,4,4)

> b.mat = matrix(runif(9),3,3)

> c.vec = 1:2

> mapply(det, list(a.mat, b.mat))

[1] 0.0000000 -0.3349038

> mapply(mean, c( list(a.mat,b.mat), c.vec))

[1] 1.0000000 0.6208733 1.0000000 2.0000000

> mapply(mean, c( list(a.mat,b.mat), list(c.vec)))

[1] 1.0000000 0.6208733 1.5000000

Tutaj det znajduje wyznaczniki elementów, a średnia znajduje środki elementów. Kolejny przykład – używając MoreArgs – jest następujący:

> set.seed(382765)

> mapply(cor, c(list(a.mat,b.mat), list(c.vec)), list(y=1:4,y=1:3,y=3:4),

list(use=”everything”), list(method=”pearson”))

[[1]]

[,1]

[1,] NA

[2,] NA

[3,] NA

[4,] NA

[[2]]

[,1]

[1,] 0.1872769

[2,] 0.8836377

[3,] -0.4585219

[[3]]

[1] 1

Warning message:

In (function (x, y = NULL, use = “everything”, method = c(“pearson”, :

the standard deviation is zero

Tutaj funkcja jest funkcją korelacji, a argumenty y, użycie i metoda są dostarczane jako lista. Więcej informacji na temat mappl () można znaleźć, wpisując ?mapply w wierszu polecenia R.

(IV) Funkcja tapply()

Funkcja tapply() stosuje funkcje do danych w tabelach krzyżowych. Argumenty to X, IND, FUN, wszelkie dodatkowe argumenty FUN i simplify. Wartością domyślną FUN jest NULL, a wartością domyślną simplify jest TRUE. Argument X musi być obiektem atomowym i jest wymuszony na wektorze. Argumentem może być tabela awaryjna utworzona przez funkcję table(). Długość X jest zatem iloczynem wymiarów tabeli awaryjnej. Argument IND musi być wektorem, który można wymusić na czynnik lub listę wektorów, które można przekształcić w czynniki. Długość X i długość (y) wektorów współczynników muszą być takie same. Wartości X to liczba obserwacji z daną kombinacją czynników, gdzie kombinacje czynników są podane przez przecięcie wartości współczynników. Jeśli kombinacje są powtarzane, funkcja nie działa prawidłowo. Nie ma potrzeby wprowadzania zer dla kombinacji czynników bez obserwacji, ale mogą być uwzględnione zera. Użycie tapply() bez funkcji daje indeks komórek, które zawierają obserwacje, podczas gdy użycie funkcji daje tabelę krzyżową współczynnika, z funkcją zastosowaną do zawartości komórek. Oto przykład:

> list(c(“a”,”b”,”b”,”c”), c(5,5,6,5))

[[1]]

[1] “a” “b” “b” “c”

[[2]]

[1] 5 5 6 5

> cbind(c(“a”,”b”,”b”,”c”),c(5,5,6,5))

[,1] [,2]

[1,] “a” “5”

[2,] “b” “5”

[3,] “b” “6”

[4,] “c” “5”

> tapply(1:4, list(c(“a”,”b”,”b”,”c”), c(5,5,6,5)))

[1] 1 2 5 3

> tapply(1:4, list(c(“a”,”b”,”b”,”c”), c(5,5,6,5)), “^”,3)

5 6

a 1 NA

b 8 27

c 64 NA

Więcej informacji o tapply() można znaleźć, wpisując ?tapply po znaku zachęty R.

(IV) Funkcje lapply(), sapply() i vapply()

Funkcje lapply(), sappl () i vapply() działają z wektorami, w tym listami i wyrażeniami. Jeśli X nie jest listą, X jest wymuszane na liście. Elementy muszą mieć odpowiedni tryb dla zastosowanej funkcji. Funkcja lapply () jest najprostsza z zaledwie dwoma argumentami i dowolnymi argumentami funkcji, która ma zostać zastosowana. Funkcja sapply () przyjmuje cztery argumenty plus wszelkie dodatkowe argumenty dla funkcji, która ma zostać zastosowana. Funkcja vapply () również pobiera cztery argumenty plus dodatkowe, aby funkcja została zastosowana.

Funkcja lapply()

Funkcja lapply() przyjmuje argumenty X i FUN oraz wszelkie dodatkowe argumenty funkcji FUN. Funkcja FUN jest stosowana do każdego elementu wektora lub każdego elementu najwyższego poziomu listy. Rezultatem jest lista. Oto przykład:

> b.list = list (1: 7,3: 4)

> b.list

[[1]]

[1] 1 2 3 4 5 6 7

[[2]]

[1] 3 4

> lapply (b.list, sum)

[[1]]

[1] 28

[[2]]

[1] 7

Operatory arytmetyczne można wprowadzać, umieszczając je w cudzysłowie.

Na przykład:

> lapply (1: 2, “^”, 2)

[[1]]

[1] 1

[[2]]

[1] 4

Funkcja sapply()

Funkcja sapply() działa również na wektorach, w tym na listach i wyrażeniach. Funkcja przyjmuje argumenty X i FUN, a następnie wszystkie argumenty do FUN, po których następują argumenty simplify i USE.NAMES. Argument simplify może być logiczny lub ciąg znaków „tablica”. Argument simplify mówi sapply (), aby uprościć listę do wektora lub macierzy, jeśli jest TRUE, i do tablicy, jeśli jest ustawiona na „tablica”. Żadne uproszczenie nie jest wykonywane, jeśli ustawiona jest wartość FALSE. W przypadku FALSE zwracana jest lista. Wartość PRAWDA jest wartością domyślną. Argument USE.NAMES jest argumentem logicznym. W przypadku obiektu o znaku trybu argument USE.NAMES mówi sapply (), aby używała elementów obiektu jako nazw wyniku. Wartość domyślna to TRUE. Oto przykład:

> list ab

jeden dolar

[1] 1 2 3 4 5

dwa dolary

[1] 3 4 5 6 7

> sapply (lista abonentów, suma)

jeden dwa

15 25

> a.char

[1] “a7” “a8” “a9” “a10”

> sapply (a.char, paste, “b”, sep = “”)

a7 a8 a9 a10

„a7b” „a8b” „a9b” „a10b”

> sapply (a.char, paste, “b”, sep = “”, USE.NAMES = F)

[1] „a7b” „a8b” „a9b” „a10b”

Funkcja vapply()

Funkcja vapply () przyjmuje argumenty X, FUN, FUN.VALUE, dowolne argumenty do FUN i USE.NAMES, w tej kolejności. Argument FUN.VALUE jest strukturą danych wyjściowych funkcji. Struktura jest strukturą wynikającą z zastosowania FUN do pojedynczego elementu X. W strukturze zastosowano atrapy wartości prawidłowego trybu. Liczba i tryb atrapy elementów muszą być poprawne. Wszelkie dodatkowe argumenty za FUN  są umieszczane po FUN.VALUE. Domyślna wartość USE.NAMES to TRUE. Oto przykład:

> set.seed (382765)

> e

[1] 1 2

> vapply (e, rnorm, matrix (.1,2,2), n = 4, sd = 1)

,, 1

[, 1] [, 2]

[1,] 1,701435 1,1422971

[2,] 2,068151 0,9604146

,, 2

[, 1] [, 2]

[1,] 0,3541925 1,186276

[2,] 2,6841000 1,745577

W tym przykładzie e jest wektorem średnich wprowadzonych do funkcji rnorm(), a pozostałe argumenty funkcji rnorm () to n = 4 i sd = 1. Funkcja vapply() zwraca tablicę, macierz lub wektor obiektów typu podanego przez argument FUN.VALUE. Więcej informacji o lapply(), sapply() i vapply() można znaleźć, wpisując ?lapply po znaku zachęty R.

(IV) Funkcje Apply

Istnieje kilka funkcji w języku R do zastosowania funkcji do podzbioru obiektu, z których sześć omówiono tutaj. Sześć funkcji to apply(), lapply(), sapply(), vapply(), tapply() i mapply (). Funkcje do zastosowania mogą być zdefiniowane przez użytkownika, co może być bardzo przydatne

Funkcja apply()

Funkcja apply() przyjmuje trzy argumenty – X, MARGINES i FUN – a także wszystkie argumenty funkcji FUN. Pierwszy argument, X, to tablica (w tym macierze). Drugi argument podaje margines (y), na których ma działać funkcja, a FUN jest funkcją, która ma zostać zastosowana. W przypadku macierzy wprowadzenie 1 w polu MARGINES powoduje zastosowanie funkcji we wszystkich kolumnach. W przypadku 2 funkcja jest stosowana w wierszach. Funkcję, która ma zostać zastosowana, wprowadza się bez nawiasów. Wszelkie argumenty funkcji są wprowadzane jako następne, oddzielone przecinkami. Wynikiem jest tablica, macierz lub wektor. Oto przykład:

> mat=matrix(1:4,2,2, dimnames=list(c(“r1″,”r2”),c(“c1″,”c2”)))

> mat

c1 c2

r1 1 3

r2 2 4

> apply(mat,1,sum)

r1 r2

4 6

> apply(mat,1,pnorm,3,1)

r1 r2

c1 0.02275013 0.1586553

c2 0.50000000 0.8413447

W tym przykładzie argumentami funkcji pnorm () są wiersze w mat dla wartości q, 3 dla wartości średniej i 1 dla wartości sd. Zauważ, że macierz jest transponowana w wyniku. Więcej informacji na temat apply () można znaleźć, wpisując ?apply w wierszu polecenia R.

(IV) Funkcje cbind() i rbind()

Funkcje cbind() i rbind() są oczywiste dla wektorów, macierzy, ramek danych i niektórych innych klas obiektów, takich jak szeregi czasowe. Funkcja cbind() wiąże kolumny. Funkcja rbind() wiąże wiersze. W przypadku list, które nie są podobne do macierzy, funkcje zwracają typ i liczbę elementów w każdym z elementów najwyższego poziomu argumentów list, tworząc macierz typów z liczbami całkowitymi. Listy można wiązać z obiektami niebędącymi listami. Wynik będzie listą, ale argumenty niebędące listą nie zostaną przekonwertowane tak, jak część wyniku będąca listą.

W wywołaniu funkcji obiekty do powiązania są oddzielane przecinkami. W przypadku cbind() wektory są traktowane jako kolumny. W przypadku rbind() wektory są traktowane jako wiersze. W przypadku wektorów wiązane wektory nie muszą mieć tej samej długości. Cykl wektorów. W przypadku obiektów o wyższych wymiarach obiekty poruszają się cyklicznie, aż powiązany obiekt zostanie wypełniony, jeśli dla rbind() liczby kolumn są wielokrotnościami siebie, a dla cbind() liczba wierszy jest wielokrotnością siebie. W przeciwnym razie funkcje wyświetlają błąd, jeśli występuje niezgodność wiersza / kolumny. Wynikowy obiekt przyjmuje typ wprowadzonego obiektu najwyższego poziomu, w którym hierarchia, od najniższego do najwyższego, jest surowa, logiczna, całkowita, podwójna, zespolona, ​​znakowa i lista. Istnieje jeden argument funkcji cbind() i rbind() inny niż obiekty, które mają być powiązane – argument deparse.level, który jest używany do tworzenia etykiet dla obiektów, które nie są podobne do macierzy. Argument jest argumentem będącym liczbą całkowitą i może przyjmować wartości 0, 1 lub 2, chociaż działa każda wartość, którą można przekształcić w liczbę całkowitą. Wartości, które nie dają 1 lub 2, gdy są przekształcane do liczby całkowitej, dają taki sam wynik jak 0. Wartość domyślna to 1. Dla ramek danych, jeśli ramka danych jest zawarta w obiektach, które mają być powiązane, i na liście, która nie jest danymi ramka nie jest uwzględniona, wynikiem jest ramka danych. W takim przypadku wszystkie kolumny znaków są zamieniane na współczynniki, chyba że określono inaczej. W przypadku szeregów czasowych cbind () daje wielowymiarowe szeregi czasowe, podczas gdy dla rbind () szereg czasowy powraca do macierzy. Oto przykład:

> ab.list = list(one=1:5,two=3:7)

> ab.list

$one

[1] 1 2 3 4 5

$two

[1] 3 4 5 6 7

> cbind(ab.list,1:4)

ab.list

[1,] Integer,5 1

[2,] Integer,5 2

[3,] Integer,5 3

[4,] Integer,5 4

> rbind(1:3,3:5,5:7)

[,1] [,2] [,3]

[1,] 1 2 3

[2,] 3 4 5

[3,] 5 6 7

Funkcje cbind() i rbind() są oczywiste dla wektorów, macierzy, ramek danych i niektórych innych klas obiektów, takich jak szeregi czasowe. Funkcja cbind() wiąże kolumny. Funkcja rbind() wiąże wiersze. W przypadku list, które nie są podobne do macierzy, funkcje zwracają typ i liczbę elementów w każdym z elementów najwyższego poziomu argumentów list, tworząc macierz typów z liczbami całkowitymi. Listy można wiązać z obiektami niebędącymi listami. Wynik będzie listą, ale argumenty niebędące listą nie zostaną przekonwertowane tak, jak część wyniku będąca listą.

W wywołaniu funkcji obiekty do powiązania są oddzielane przecinkami. W przypadku cbind() wektory są traktowane jako kolumny. W przypadku rbind() wektory są traktowane jako wiersze. W przypadku wektorów wiązane wektory nie muszą mieć tej samej długości. Cykl wektorów. W przypadku obiektów o wyższych wymiarach obiekty poruszają się cyklicznie, aż powiązany obiekt zostanie wypełniony, jeśli dla rbind() liczby kolumn są wielokrotnościami siebie, a dla cbind() liczba wierszy jest wielokrotnością siebie. W przeciwnym razie funkcje wyświetlają błąd, jeśli występuje niezgodność wiersza / kolumny. Wynikowy obiekt przyjmuje typ wprowadzonego obiektu najwyższego poziomu, w którym hierarchia, od najniższego do najwyższego, jest surowa, logiczna, całkowita, podwójna, zespolona, ​​znakowa i lista. Istnieje jeden argument funkcji cbind() i rbind() inny niż obiekty, które mają być powiązane – argument deparse.level, który jest używany do tworzenia etykiet dla obiektów, które nie są podobne do macierzy. Argument jest argumentem będącym liczbą całkowitą i może przyjmować wartości 0, 1 lub 2, chociaż działa każda wartość, którą można przekształcić w liczbę całkowitą. Wartości, które nie dają 1 lub 2, gdy są przekształcane do liczby całkowitej, dają taki sam wynik jak 0. Wartość domyślna to 1. Dla ramek danych, jeśli ramka danych jest zawarta w obiektach, które mają być powiązane, i na liście, która nie jest danymi ramka nie jest uwzględniona, wynikiem jest ramka danych. W takim przypadku wszystkie kolumny znaków są zamieniane na współczynniki, chyba że określono inaczej. W przypadku szeregów czasowych cbind () daje wielowymiarowe szeregi czasowe, podczas gdy dla rbind () szereg czasowy powraca do macierzy. Oto przykład:

> ab.list = list(one=1:5,two=3:7)

> ab.list

$one

[1] 1 2 3 4 5

$two

[1] 3 4 5 6 7

> cbind(ab.list,1:4)

ab.list

[1,] Integer,5 1

[2,] Integer,5 2

[3,] Integer,5 3

[4,] Integer,5 4

> rbind(1:3,3:5,5:7)

[,1] [,2] [,3]

[1,] 1 2 3

[2,] 3 4 5

[3,] 5 6 7

(IV) Funkcja nchar()

Funkcja nchar() zlicza znaki w obiektach, które mogą zostać przekształcone w znak trybu. Funkcja przyjmuje trzy argumenty: x, type i allowNA. Argument x jest obiektem. Funkcja wymusza na obiekcie znak, a policzone znaki to znaki wymuszonego obiektu. Na przykład:

> as.character (a.list)

[1] “1: 4” “c (\” abc \ “, \” cde \ “)” “NULL”

> nchar (a.list)

[1] 3 15 4

Cytaty nie są liczone. Typ argumentu jest argumentem znakowym i może przyjmować wartości „b”, „znaków” lub „szerokości”. Jeśli wybrano „bajty”, zliczane są bajty łańcuchów. W przypadku wybrania „znaków” zliczana jest standardowa liczba znaków w tekście. Jeśli wybrano „szerokość”, zliczana jest liczba znaków, które funkcja cat() przypisałaby ciągom. Wartość domyślna to „char”. Zwykle nie ma różnicy między tymi trzema. Argument allowNA jest argumentem logicznym. Jeśli jest ustawiony na PRAWDA, łańcuchy, które nie są prawidłowe, są ustawiane jako równe NA. Jeśli ustawiono na FALSE, niepoprawne łańcuchy powodują błąd i powodują zatrzymanie funkcji. Wartość domyślna to FALSE. Więcej informacji na temat nchar() można znaleźć, wpisując ?char w wierszu polecenia R