2013-07-11 11 views
6

Obecnie piszę funkcję, która akceptuje tylko niektóre dane wejściowe (w przykładzie tylko "a" i "b"). Dla wszystkich innych wejść funkcja zwróci błąd.Niestandardowe uzupełnianie zakładek w funkcji R

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

Aby pomóc użytkownikom funkcji Chciałbym dostarczyć dozwolonych wartości dla x (przechowywanej w allowedX) za pomocą funkcji zakończenia zakładka w badania i wymienić zakończenie domyślna nazwa pliku, który jest zazwyczaj stosowana po zacytować. Więc naciskając TAB powinno dać coś takiego:

test(x="<TAB> 
a b 

Ja jednak nie mógł znaleźć rozwiązanie tak daleko jak mapować Wektor allowedX do zakończenia w zakładce R. Czy ktoś może mi powiedzieć jak to zrobić?

Z góry dziękuję!

+0

powinieneś zobaczyć 'match.arg' na ... (\ t) nie jest jasne. – agstudy

+0

Co mam na myśli z jest to, że zazwyczaj, jeśli zaczniesz pisać polecenie w R i naciskasz przycisk tabulator () na klawiaturze, otrzymasz listę możliwych opcji do wykonania polecenia. Na przykład, wpisanie 'read.csv' i dwukrotne dotknięcie daje" read.csv read.csv2 "jako dwie opcje do wykonania polecenia. Jeśli zrobisz to samo dla rozpoczętej oferty, R wyświetli listę plików w twoim aktualnym katalogu. Próbuję zrobić, że w moim przypadku należy uzyskać dwie opcje "ab" pokazane po dotknięciu po otwarciu cytatu dla x 'test (x =" '. – user2572255

+2

Nie" zwykle "- tylko w jakimkolwiek GUI lub interfejs poleceń, których używasz. Być może będziesz w stanie zrobić coś takiego jak 'test <- function() {x <- readline (" input, please "); if (grep (x, some_magic_pattern, allowedX)) do_something } '. Ale ... wydaje się, że próbujesz zbudować GUI w swojej funkcji. Zaleciłbym wykonanie całej rzeczy przez TclTK, która może być wywołana z R. –

Odpowiedz

1

można spróbować coś jak poniżej:

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!") 
}