2013-07-11 28 views
6

Tôi hiện đang viết một chức năng chỉ chấp nhận các đầu vào nhất định (trong ví dụ chỉ "a" và "b"). Đối với tất cả các đầu vào khác, hàm sẽ trả về lỗi.Hoàn thành tab tùy chỉnh trong chức năng R

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

Để giúp người dùng của hàm tôi muốn cung cấp các giá trị cho phép đối với x (lưu trữ trong allowedX) sử dụng tính năng hoàn tab trong R và thay thế hoàn tên file mặc định mà thường được áp dụng sau khi một Trích dẫn. Vì vậy, nhấn TAB nên cung cấp cho một cái gì đó như:

test(x="<TAB> 
a b 

Tuy nhiên, tôi không thể tìm thấy một giải pháp cho đến nay như thế nào để lập bản đồ vector allowedX để hoàn thành tab trong R. Ai đó có thể cho tôi biết làm thế nào để làm điều đó?

Cảm ơn trước!

+0

bạn sẽ thấy 'match.arg' ... Các (\ t) là không rõ ràng. – agstudy

+0

Ý tôi là với là thông thường, nếu bạn bắt đầu gõ lệnh trong R và bạn nhấn nút lập trình () trên bàn phím, bạn sẽ có danh sách các tùy chọn có thể để hoàn thành lệnh của mình. Ví dụ, gõ 'read.csv' và gõ hai lần sẽ cho bạn' read.csv read.csv2' làm hai tùy chọn để hoàn thành lệnh của bạn. Nếu bạn làm như vậy cho một báo giá bắt đầu R sẽ hiển thị cho bạn một danh sách các tệp trong thư mục hiện tại của bạn. Những gì tôi đang cố gắng làm là trong trường hợp của tôi, ta nên có hai tùy chọn 'ab' hiển thị khi gõ sau khi mở báo giá cho x' test (x = "'. – user2572255

+2

Không "thường" - chỉ trong bất kỳ GUI nào Bạn có thể có khả năng có thể làm điều gì đó như 'test <- function() {x <- readline (" input, please "); if (grep (x, some_magic_pattern, allowedX)) do_something } 'Nhưng ... bạn dường như đang cố gắng xây dựng một GUI bên trong chức năng của bạn. Tôi khuyên bạn nên làm toàn bộ điều thông qua TclTK, có thể được gọi từ R. –

Trả lời

1

Bạn có thể thử một cái gì đó như sau:

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!") 
} 
Các vấn đề liên quan