2012-06-09 11 views
26

Próbuję ustawić macierz 3D w R. Myślę, że to jest łatwe. Jednak do tej pory nie znalazłem rozwiązania. Załóżmy, że chcemy utworzyć macierz 365x6x4. Niezwykle istotną formą jest to, że mogę zmienić jeden wpis w macierzy. Powiedzmy, że chcemy przypisać wartość 204 do elementu [304,5,2]. Bardzo dziękuję za odpowiedź!Konfigurowanie macierzy 3D w R i uzyskiwanie dostępu do pewnych elementów

dziękuję! najlepiej, F

+0

3D? Czy nie byłby to raczej układ 3D? – Havelock

Odpowiedz

28

Spróbuj tego:

ar <- array(someData, c(365, 6, 4)); 
ar[304,5,2] <- 204; 

gdzie someData może być

someData <- rep(0, 365*6*4); 

albo jeszcze lepiej może matryca

someData <- rep(NaN, 365*6*4); 
+1

Zły zapis. ar [304,5,2] jest poprawny. –

+1

oh, w rzeczy samej, dzięki! – Havelock

+0

Nie ma problemu, musisz myśleć o C :) –

5

Spróbuj tego prostego przykładu (dokonały przykład dość mały więc jest jasne, co się dzieje - wyjaśnię poniżej, jak dostosować go do konkretnej kwestii) ...

m = array(1:60, dim=c(3,4,5)) 

m[2,1,5] 
[1] 50 

m[2,1,5] = -50 

m[2,1,5] 
[1] -50 

Wpisz m, aby zobaczyć całą tablicę 3d :)

W twoim przykładzie skonfigurowałbyś początkową tablicę jako m = array(NA, dim=c(365,6,4)) (to wypełni ją NAs na początek - czy masz dane do wypełnienia?) A zadanie to oczywiście: m[304,5,2] = 204, oczywiście :)

+0

Aby wyjaśnić, 'm [2,1,5]' jest początkowo 50 (ze względu na sposób wypełniania 'm') i staje się -50 po wprowadzeniu zmiany (' m [2,1,5] = - 50 '). Wpisz 'm', aby zobaczyć całą tablicę 3d :) –

13

Macierz to specjalny dwuwymiarowy przypadek tablicy. (Cytując z pomocy dla ?matrix).

Tak, trzeba array:

x <- array(rep(1, 365*5*4), dim=c(365, 5, 4)) 
str(x) 
num [1:365, 1:5, 1:4] 1 1 1 1 1 1 1 1 1 1 ... 

Ustaw konkretną wartość:

x[305, 5, 2] <- 204 

Print jeden kawałek:

x[305, , ] 
    [,1] [,2] [,3] [,4] 
[1,] 1 1 1 1 
[2,] 1 1 1 1 
[3,] 1 1 1 1 
[4,] 1 1 1 1 
[5,] 1 204 1 1 
+0

Oczywiście, polecenie pierwsze rep jest tu nadmiarowe. Zobacz moją odpowiedź dla przykładu, gdzie możesz zobaczyć całą tablicę :) –

+6

@TimP To może być zbyteczne, ale jest też oczywiste, co ten kod robi. Poleganie na zachowaniu lub funkcji * X * R może odciągnąć uwagę od prawdziwego problemu, który próbuje się zilustrować w odpowiedzi. Dodanie punktu raz dodaje ogólną treść tego Q. Robienie tego dwa razy wydaje się małostkowe. –

+0

Przepraszam, że czujesz, że to małostkowe, chociaż Havelock z pewnością docenił wskaźnik - więc cieszę się, że o tym też mu ​​wspominałem :) –

Powiązane problemy