2012-03-29 6 views

Odpowiedz

21

Najpierw należy uzyskać wiersz i kolumnę tego indeksu, używając arrayInd.

k <- arrayInd(4, dim(mdat)) 

Można wtedy uzyskać odpowiednią nazwę dostając ten element z wierszy i kolumn nazwami

rownames(mdat)[k[,1]] 
colnames(mdat)[k[,2]] 

lub obu naraz używając mapply:

mapply(`[[`, dimnames(mdat), k) 
+4

ponownie przeczytaniu tej odpowiedzi, Zastanawiam się, czy OP miał tylko ogólny indeks, ponieważ uruchamiał 'which' bez' arr.ind = TRUE'. Przyszli czytelnicy: jeśli otrzymujesz ten indeks z 'co', użyj' arr.ind = TRUE', aby uzyskać indeksy wierszy i kolumn, zamiast użyć 'arrayInd'. – Aaron

6

podzbiorów matrycy pierwsze rezultaty w wektorze jednego elementu, który nie ma nazwy, jak można pokazać w swoim pytaniu. Pamiętaj, że podzbiór tworzy całkowicie nowy obiekt poprzez kopiowanie. Po podsekcji nie można odwoływać się do oryginału mdat.

Jest to bardziej jasne, jeśli przypiszesz wynik podzbioru do innego obiektu.

> m <- mdat[4] 
> m 
[1] 12 
> names(m) # no names were printed above... so 
NULL 

Naprawdę chcesz uzyskać dostęp nazwy kolumn/wierszy i pierwszy podzbiór im.

> colnames(mdat)[3] 
[1] "C.3" 
> rownames(mdat)[2] 
[1] "row2" 

Można ponownie przypisać nazwy kolumn/wierszy w podobny sposób.

> colnames(mdat)[3] <- "C3" 
> rownames(mdat)[2] <- "row.2" 
> mdat 
     C.1 C.2 C3 
row1 1 2 3 
row.2 11 12 13