2010-11-05 19 views
14

Domanda super veloce ...Argomenti della funzione Cast come stringa di caratteri?

Come si prende un argomento di una determinata funzione (definito dall'utente) e lo si esegue come stringa di caratteri?

Se per un semplice esempio,

foo <- function(x) { ... } 

voglio tornare semplicemente nome dell'oggetto di x. Così,

foo(testing123) 

rendimenti "testing123" (e testing123 potrebbe essere solo un po 'di vettore numerico casuale)

Mi scuso se questa domanda è stato chiesto prima - cercato, ma non riuscivano a trovarlo! Grazie!!

risposta

31
foo <- function(x) deparse(substitute(x)) 
2

Ops, a quanto pare non ho ricerca abbastanza difficile ...

foo <- function(x) {return(as.character(substitute(x)))} 

bene che è facile ...

+0

'deparse (sostituto (x))' sarebbe il solito modo di farlo, come da risposta di JD. Confronta la tua versione con JD su questo 'foo (testing * bar)' per capire perché. –

+0

Sì !! L'ho appena capito. 'depravata' è la strada da percorrere. Grazie per la conferma. – Ray

+3

se sei soddisfatto della risposta di JD, assicurati di accettarlo in modo che i) JD ottenga un rappresentante e ii) altri utenti che leggono il Q sappia che questo ha risposto al tuo Q –

17

Meta-risposta: se sai R fa qualcosa e si desidera per farlo, controlla la fonte. Ad esempio, potresti aver notato che plot(foo) stick "pippo" nello ylab, quindi la trama può farlo. Come? Inizia guardando il codice:

> plot 
function (x, y, ...) 
{ 
    if (is.function(x) && is.null(attr(x, "class"))) { 
     if (missing(y)) 
      y <- NULL 
     hasylab <- function(...) !all(is.na(pmatch(names(list(...)), 
      "ylab"))) 
     if (hasylab(...)) 
      plot.function(x, y, ...) 
     else plot.function(x, y, ylab = paste(deparse(substitute(x)), 
      "(x)"), ...) 
    } 
    else UseMethod("plot") 
} 

E c'è un po 'di magia deparse(substitute(x)).

+0

Non sono sicuro che sia importante, dato che la risposta è ottima, ma 'plot' non sembra più questo –

+0

@Spacedman: questo è un ottimo punto! – theforestecologist

Problemi correlati