2011-08-30 17 views
17

Quando guardo il contenuto del [[.data.frame sul mio PC, questo è ciò che ottengo:" ..1" nel corpo di '[[.data.frame'

> get("[[.data.frame") 
function (x, ..., exact = TRUE) 
{ 
    na <- nargs() - (!missing(exact)) 
    if (!all(names(sys.call()) %in% c("", "exact"))) 
     warning("named arguments other than 'exact' are discouraged") 
    if (na < 3L) 
     (function(x, i, exact) if (is.matrix(i)) 
      as.matrix(x)[[i]] 
     else .subset2(x, i, exact = exact))(x, ..., exact = exact) 
    else { 
     col <- .subset2(x, ..2, exact = exact) 
     i <- if (is.character(..1)) 
      pmatch(..1, row.names(x), duplicates.ok = TRUE) 
     else ..1 
     .subset2(col, i, exact = exact) 
    } 
} 
<environment: namespace:base> 

io sono abituato a ..., ma questa è la prima volta che ho visto ..1 e ..2. Una rapida ricerca sia in R che in Google è tornata per lo più spazzatura, poiché i punti sono spesso interpretati come segnaposto, quindi spero che qualcuno qui possa darmi un puntatore? O mi sto perdendo qualcosa di terribilmente ovvio? Da dove vengono questi e come posso usarli?

risposta

16

Questo è un modo per fare riferimento al 1 °, 2 ° ... elementi dello speciale pairlist che è .... Quindi ..1 è il modo per fare riferimento al primo elemento di ..., ..2 fa riferimento al secondo elemento di ... e così via.

Questo è menzionato nel manuale R Internals in sezione 1.5.2 Dot-dot-dot arguments, il bit rilevanti dei quali è:

Il valore di ... è un pairlist (speciale) i cui elementi sono indicati dai simboli speciali ..1, ..2 , ... che hanno il bit DDVAL impostato: quando viene rilevato uno di questi viene visualizzato (tramite ddfindVar) nel valore del simbolo ... nel riquadro di valutazione.

5

Per aggiungere alla risposta di Gavin:

Sono anche menzionati brevemente nella pagina di aiuto per le parole riservate (?Reserved).

Davvero un semplice esempio di utilizzo è

f <- function(...) print(..1) 
f(x = 99) #prints 99 
f()  #throws an error