2010-08-26 47 views
5

Tôi đang sử dụng mã sau đây cho Ứng dụng Giá Chia sẻ mà tôi đã phát triển (với rất nhiều trợ giúp từ những người ở đây được đánh giá cao!). Một trong những điều cần làm là cho phép người dùng chọn một công ty để phân tích từ lưu trữ XML Files, tôi đã được sử dụng đoạn mã sau để làm điều này:Thực hiện danh sách thả xuống trong R

df <- xmlToDataFrame(file.choose()) 

Thay vì sử dụng file.choose() {như dường như hộp thoại cho thấy nhiều cấu trúc hệ thống}, nó đã được đề xuất sử dụng một trình đơn thả xuống, với một danh sách các công ty và một liên kết đến tệp.

Điều đó có thể xảy ra trong R và có cách thực hiện dễ dàng không?

+0

Có list.files() liệt kê tất cả các tệp của thư mục, ví dụ: list.files (getwd()) sẽ giới hạn nó vào thư mục làm việc của bạn. Tôi biết, nó chưa tương tác, nhưng có thể bạn làm điều gì đó từ nó. Có lẽ với sự giúp đỡ của http builderver được xây dựng. –

+0

Khám phá [this] (http://bioinf.wehi.edu.au/~wettenhall/RTclTkExamples/DropDown.html). Ngoài ra [câu hỏi liên quan này] (http://stackoverflow.com/questions/2540232/how-to-allow-multiple-inputs-from-user-using-r). –

Trả lời

7

select.list cho phép bạn chọn từ danh sách. Kiểm tra cũng menu.

Ví dụ:

Sử dụng menu

companies <- c("AAA","BBB","CCC") 
links <- c("c:/file1","c:/secret/file3","c:/file3") 

i <- menu(companies, graphics=TRUE, title="Choose company") 
df <- xmlToDataFrame(links[i]) 

Sử dụng select.list

companies <- c("AAA","BBB","CCC") 
links <- c("c:/file1","c:/secret/file3","c:/file3") 

i <- select.list(companies, title="Choose company") 
df <- xmlToDataFrame(links[companies==i]) 

Nếu bạn muốn hiển thị tên và liên kết trong danh sách sau đó sử dụng

menu_items <- paste(companies, " (", links, ")", sep="") 
i <- select.list(menu_items, title="Choose company") 
df <- xmlToDataFrame(links[menu_items==i]) 
+0

Ok hoạt động từ bên trong R. Tuy nhiên, khi tôi chạy nó từ tập tin Batch bằng cách sử dụng Rscript nó không hoạt động. Tôi có nên sử dụng các gói/mã bổ sung nào không? –

+0

'xmlToDataFrame' nằm trong gói' RSXML'. Bạn đã cài đặt phiên bản R bạn đang gọi ở chế độ hàng loạt chưa? –

+0

@Anthony No. Đó là hành vi mong đợi. Từ '? Menu':" Đó là lỗi khi sử dụng 'menu' trong một phiên không tương tác." Bạn có thể thử 'tk_select.list' từ gói tcltk. – Marek

3

Nếu bạn không muốn tham gia chương trình tcltk, hãy thử các gói gWidgets.

library(gWidgetstcltk) # or library(gWidgetsRGtk2), etc. 
drp <- gdroplist(c("AAA", "BBB", "CCC"), container = gwindow()) 
Các vấn đề liên quan