2013-07-11 2 views
6

Attualmente sto scrivendo una funzione che accetta solo determinati input (nell'esempio solo "a" e "b"). Per tutti gli altri input la funzione restituirà un errore.Completamento scheda personalizzata in funzione R

test <- function(x) { 
    allowedX <- c("a","b") 
    if(x %in% allowedX) print("Good choice!") 
    else stop("wrong input!") 
} 

per aiutare gli utenti della funzione vorrei fornire i valori consentiti per x (memorizzato in allowedX) utilizzando la funzione di completamento scheda in R e sostituire il completamento dei nomi di file predefinito che viene generalmente applicato dopo un citazione. Quindi premere TAB deve dare qualcosa di simile:

test(x="<TAB> 
a b 

Tuttavia, non ho potuto trovare una soluzione finora come mappare il vettore allowedX al completamento scheda in R. Qualcuno può dirmi come fare?

Grazie in anticipo!

+0

si dovrebbe vedere 'match.arg' ... Il (\ t) non è chiaro. – agstudy

+0

Quello che intendo con è che in genere, se si inizia a digitare un comando in R e si preme il pulsante tabulatore () sulla tastiera si ottiene un elenco di opzioni possibili per completare il comando. Ad esempio, digitando 'read.csv' e toccando due volte otterrai' read.csv read.csv2' come le due opzioni per completare il comando. Se fai lo stesso per una citazione iniziata R ti mostrerà una lista di file nella tua directory corrente. Quello che sto cercando di fare è che nel mio caso si dovrebbero visualizzare le due opzioni 'ab' quando si tocca dopo aver aperto la citazione per x' test (x = "". – user2572255

+2

Non "tipicamente" - solo in qualsiasi GUI o l'interfaccia di comando che stai usando. Potresti essere in grado di fare qualcosa come 'test <- function() {x <- readline (" input, please "); if (grep (x, some_magic_pattern, allowedX)) do_qualcosa } '. Ma ... sembra che tu stia cercando di costruire una GUI all'interno della tua funzione. Suggerirei di fare tutto tramite TclTK, che può essere chiamato da R. –

risposta

1

Si potrebbe provare qualcosa di simile al seguente:

test <- function() { 
    allowedX <- c("a","b") 
    x = readline('Please enter your choice of parameters (either "a" or "b"): ') 
    if(x %in% allowedX) print("Good choice!") 
    else stop("wrong input!") 
}