2012-10-05 13 views
6

Quando si sottomettono gli array, R si comporta in modo diverso a seconda che una delle dimensioni sia di lunghezza 1 o meno. Se una quota ha lunghezza 1, quella dimensione viene perso durante sottoinsiemi:R array di subset: dimensione persa quando la sua lunghezza è 1

ax <- array(1:24, c(2,3,4)) 
ay <- array(1:12, c(1,3,4)) 
dim(ax) 
#[1] 2 3 4 
dim(ay) 
#[1] 1 3 4 
dim(ax[,1:2,]) 
#[1] 2 2 4 
dim(ay[,1:2,]) 
#[1] 2 4 

Dal mio punto di vista, ax e ay è la stessa, ed eseguendo la stessa operazione sottoinsieme sopra dovrebbe restituire un array con le stesse dimensioni . Posso vedere che il modo in cui R gestisce i due casi potrebbe essere utile, ma è indesiderabile nel codice che sto scrivendo. Significa che quando passo una matrice subsettita ad un'altra funzione, la funzione otterrà una matrice che manca una dimensione, se mi è capitato di ridurre una dimensione alla lunghezza 1 in una fase precedente. (Quindi in questo caso la flessibilità di R sta rendendo il mio codice meno flessibile!)

Come posso evitare che R perda una dimensione di lunghezza 1 durante il subsetting? C'è un altro modo di indicizzare? Qualche bandiera da impostare?

+0

non identico, ma forse interessare: http://stackoverflow.com/questions/12196724/generally-disable-dimension-dropping-for-matrices –

risposta

14

Come è stato rilevato per impostazione predefinita, R elimina le dimensioni non necessarie. L'aggiunta di drop=FALSE mentre l'indicizzazione può prevenire questo:

> dim(ay[,1:2,]) 
[1] 2 4 
> dim(ax[,1:2,]) 
[1] 2 2 4 
> dim(ay[,1:2,,drop = F]) 
[1] 1 2 4 
+0

Grazie, Dason. Perfezionare. Non avrei mai immaginato che potessi farlo in quel modo. (Sapevo che era una FAQ, ma è difficile costruire una stringa di ricerca utile per una risposta.) – Mars

+0

Domanda successiva: Come posso ottenere queste informazioni sulla sintassi dal sistema di aiuto integrato? – Mars

+0

'?" ["' Dovrebbe funzionare. Oppure 'help (" [")'. – Dason

Problemi correlati