2011-09-07 9 views
7

Sto eseguendo il porting di un programma (non sufficiente per la compilazione e l'esecuzione) da R a C++. Non ho familiarità con R. Ho fatto bene usando i riferimenti on-line, ma è stato sconcertato dalla seguente riga:In R, cosa fa un indice negativo?

cnt2.2<-cnt2[,-1] 

sto indovinando:

  1. cnt2 è una matrice 2 dimensionale
  2. cnt2.2 è una nuova variabile dichiarata con un punto '.' usato allo stesso modo di un carattere alfabetico.
  3. <- è un compito.
  4. [,-1] accede alla parte dell'array. Pensavo che lo [,5] significasse tutte le righe, solo la 5a colonna. Se questo è corretto, non ho idea di cosa si riferisca a -1.

risposta

8

indici negativi specificano cadere (anziché ritegno) elementi particolari ... quindi x[,-1] specifica cadere prima colonna (righe sono la prima dimensione, prima della virgola, e le colonne sono la seconda dimensione, dopo la virgola). Da ?"[" (http://stat.ethz.ch/R-manual/R-devel/library/base/html/Extract.html):

For ‘[’-indexing only: ‘i’, ‘j’, ‘...’ can be logical 
      vectors, indicating elements/slices to select. Such vectors 
      are recycled if necessary to match the corresponding extent. 
      ‘i’, ‘j’, ‘...’ can also be negative integers, indicating 
      elements/slices to leave out of the selection. 
4

1) CNT2 è una matrice 2 dimensionale

Dal codice hai fornito è davvero una struttura a 2 dimensioni di qualche tipo (molto probabilmente una matrice).

2) cnt2.2 è una nuova variabile viene dichiarata con un periodo '' usato allo stesso modo di un carattere alfabetico.

Corretto.

3) < - è un compito.

Corretto.

4) [, -1] accede a una parte dell'array. Pensavo che [, 5] significasse tutte le righe, solo la 5a colonna. Se questo è corretto, non ho idea di cosa si riferisca a -1.

[,-1] seleziona tutte le colonne eccetto colonna 1. Si noti che, a differenza di C++, gli indici in R iniziano da uno piuttosto che da zero.

+0

+1 per il commento sull'indicizzazione da 1 (anche se spero che l'OP lo abbia già capito) –