2013-02-15 12 views
8

Mam zestaw wektorów V_1, V_2, ..., V_n, które chciałbym przekonwertować na macierz. Każdy wektor staje się wektorem kolumnowym w macierzy. Rozmiar każdego wektora jest taki sam. Czy jest to prosta funkcja? W sekcji macierzy The R Book nie wydaje się, że ta funkcja istnieje. tamWektory kolumnowe do macierzy w R

mat=matrix(c(V1, V2, ..., VN), nrow=length(V1)) 
  1. Czy jakaś funkcja dopisywania macierzy dołączyć kolumny na końcu matrycy:

    Co jestem obecnie robi to?

Edycja: Koniec celem jest wykonanie k-means klastrów z tej matrycy. Nazwy moich wektorów nie są w rzeczywistości V_1, V_2, ..., V_n. Nazwy wektorów są podciągami odpowiadającymi nazwie pliku, z którego pochodzą dane (jest to mapa 1-1). W końcu będę iterował nad wszystkimi plikami w określonym katalogu, wyodrębniając dane do wektora, a następnie dołączając każdy wektor kolumn do macierzy.

+0

Czy istnieje rym lub powód do wymieniania nazw wektorów, czy są one dosłownie V1 ... VN? Innym rozwiązaniem byłoby cbind, ale nadal będziesz musiał wymienić każdy z twoich wektorów. – russellpierce

+0

Moje wektory nie są nazywane $ V_1, \ ldots, V_n $, ale jest trochę rymu lub przyczyny do nazw moich wektorów, ponieważ będą one podciąganiami nazwy pliku, z którego pochodzą dane. – CodeKingPlusPlus

+0

FYI, twoja struktura danych i pożądana struktura są dość proste i łatwe do opisania bez konieczności statystycznego zrozumienia. Twoje pytanie może być lepiej zadane na stackoverflow. Na razie nie musisz nic robić. Jeśli wystarczająco wielu innych członków społeczności zgodzi się z moją oceną, zostanie ona poddana migracji. – russellpierce

Odpowiedz

8

Polecenie, które może pracować dla Ciebie, to: sapply(ls(pattern="V[[:digit:]]"),get) Gdzie argument we wzorcu jest wyrażeniem regularnym pasującym do żądanych wektorów (i tylko tych wektorów, które chcesz). Alternatywnie, biorąc pod uwagę, że wektory są nazwane z podłańcucha niektórych nazw plików, zakładam, że możesz stworzyć wektor znaków z każdą nazwą wektora jako elementem. Jeśli tak, możesz zamienić polecenie ls na ten wektor.

Edytuj: Matrix append by column to cbind (bindowanie kolumn). Na przykład:

V1 <- rnorm(20) 
V2 <- rnorm(20) 
V3 <- rnorm(20) 
mat <- matrix(c(V1,V2),nrow=length(V1)) 
(mat.app <- cbind(mat,V3)) 
+0

'(mat.app <- cbind (mata, V3))' działa, gdy uruchomię go na jednym wektorze, ale kiedy zastosuję go ogólnie w macie pętli, nie zmieni się. Jakieś pomysły? – CodeKingPlusPlus

+0

Cóż ... co się zmienia to mat.app not mat. Więc w pętli musisz upewnić się, że przechowujesz nową matę o tej samej nazwie, którą później wykorzystasz jako argument w cind. Na przykład. mat <- cind (mat, VectorToAdd) – russellpierce

+4

Możesz zrobić 'do.call (" cbind ", lapply (ls (wzór =" V [[: cyfra:]] "), get))', aby zautomatyzować ostatni krok 'cindowanie wektorów. – caracal