2015-07-07 14 views

Odpowiedz

15

Ani. Wektor nie ma domyślnie atrybutu wymiaru, ma tylko długość.

Jeśli spojrzeć na dokumentacji dotyczącej arytmetyki macierzy, help("%*%"), widać, że:

mnoży dwie macierze, jeśli są one dopasowujący. Jeśli jeden argument jest wektorem , będzie on promowany do macierzy wiersza lub kolumny, aby uczynić dwa argumenty zgodne. Jeśli oba są wektorami o tej samej długości, , zwrócą one wewnętrzny produkt (jako macierz).

Tak więc R zinterpretuje wektor w jakikolwiek sposób, który sprawi, że produkt matrycowy będzie rozsądny.

Niektóre przykłady ilustrujące:

> b <- c(7,10) 
> b 
[1] 7 10 
> dim(b) <- c(1,2) 
> b 
    [,1] [,2] 
[1,] 7 10 
> dim(b) <- c(2,1) 
> b 
    [,1] 
[1,] 7 
[2,] 10 
> class(b) 
[1] "matrix" 
> dim(b) <- NULL 
> b 
[1] 7 10 
> class(b) 
[1] "numeric" 

macierz jest to wektor z atrybutem wymiarowej. Dodanie wyraźnego wymiaru sprawia, że ​​jest matrycą, a R zrobi to w jakikolwiek sposób ma sens w kontekście.

a przykładem zachowania w kontekście mnożenia macierzy:

> m <- matrix(1:2,1,2) 
> m 
    [,1] [,2] 
[1,] 1 2 
> m %*% b 
    [,1] 
[1,] 27 
> m <- matrix(1:2,2,1) 
> m %*% b 
    [,1] [,2] 
[1,] 7 10 
[2,] 14 20 
+3

... z pewnym nastawieniem na traktowanie go jako wektor kolumnowy? 't (b)' jest w końcu wektorem wiersza. – Frank

1

Funkcja c tworzy „atomową” wektor, używając słowa Normana Matloff w sztuce programowania R:

wektory atomowe, ponieważ ich składniki nie mogą być podzielone na mniejsze komponenty.

Może to być postrzegane jako „łączenie” (w rzeczywistości c podpórek Złącz) elementów, indeksowane przez swoich pozycjach i tak bez wymiarach (w przestrzennego znaczeniu), ale tylko ciągłego indeksu że idzie od 1 do długości samego obiektu.

+0

'is.atomic (c (1, list (2))) # FALSE' W każdym przypadku pytanie jest węższe niż" Co robi 'c'?" – Frank

3

Możesz traktować wektor (c()) w R jako wiersz lub kolumnę. Możesz to zobaczyć przez

rbind(c(1,3,5),c(2,4,6)) 
cbind(c(1,2,3),c(4,5,6)) 

To jest kolekcja. Domyślnie Tho podczas rzucania do ramki danych

data.frame(c(1,2,3)) 

jest wykonane kolumny, takie gdzie pierwszy indeks adres, który kolumna tabeli jest określany w sprzeczności do tego, co jest prawosławna w algebrze liniowej.

tj., Aby uzyskać dostęp do cześć w tym odlewania wektora do danych.Rama dodatkowy wskaźnik jest wymagane

a = data.frame(c("hello","F***ery")) 
a[[1]][[1]] 

i to jest, gdy robi się głupi, ponieważ ramki danych nie szczypiorek z ciągów ... typu „hello” jest podobno liczbą całkowitą, z poziomu ...

+0

Kilka problemów: nie ma ścisłej równoważności między "c" a byciem wektorem; wektor w ogóle nie przypomina zbioru, w sensie matematycznym; data.frames mają akcesory, które idealnie pasują do intuicji z algebry macierzy (spróbuj 'a [1,]' i 'a [1,1]' dla twoich przykładów). 'a [1]' i 'a [[1]]' są dodatkowymi akcesoriami, których nikt nie obiecał dopasować do algebry macierzy; ani nikt nie powinien ich oczekiwać, ponieważ "data.frame" nie jest pojęciem z algebry macierzy. – Frank

+1

Tak, potykałem się trochę o nazewnictwo. Używam wektora tutaj w sensie Java ... – kpie