2010-08-26 19 views
5

Sto utilizzando il seguente codice per l'applicazione del prezzo di condivisione che ho sviluppato (con molto aiuto da parte delle persone qui che sono molto apprezzate!). Una delle cose che dovrebbe fare è permettere all'utente di scegliere una società di analizzare da file XML memorizzato, ho utilizzato il seguente codice per fare questo:Implementazione elenco a discesa in R

df <- xmlToDataFrame(file.choose()) 

Invece di utilizzare file.choose() {come apparentemente la finestra di dialogo rivela gran parte della struttura del sistema}, è stato suggerito di usare un menu a tendina, con un elenco delle aziende e un link al file.

È una cosa possibile in R e c'è un modo facile per implementarlo?

+0

C'è list.files() che elenca tutti i file della directory, ad es .: list.files (getwd()) limiterebbe alla vostra directory di lavoro. Lo so, non è ancora interattivo, ma forse ne fai qualcosa. Forse con l'aiuto del built-in http helpserver. –

+0

Check out [this] (http://bioinf.wehi.edu.au/~wettenhall/RTclTkExamples/DropDown.html). Anche questa [domanda correlata] (http://stackoverflow.com/questions/2540232/how-to-allow-multiple-inputs-from-user-using-r). –

risposta

7

select.list consentono di selezionare da un elenco. Controlla anche menu.

Esempi:

Uso 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]) 

Utilizzando 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]) 

Se si desidera visualizzare nome e link sulla lista quindi utilizzare

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

Ok che funziona da dentro R. Tuttavia, quando lo eseguo dal file Batch usando Rscript non funziona. Ci sono altri pacchetti/codice che dovrei usare? –

+0

'xmlToDataFrame' è nel pacchetto' RSXML'. Hai installato quello per la versione di R che stai chiamando in modalità batch? –

+0

@Anthony No. È un comportamento previsto. Da '? Menu':" È un errore usare 'menu' in una sessione non interattiva.". Si potrebbe provare 'tk_select.list' dal pacchetto tcltk. – Marek

3

Se non si desidera entrare nella programmazione tcltk, provare i pacchetti gWidgets.

library(gWidgetstcltk) # or library(gWidgetsRGtk2), etc. 
drp <- gdroplist(c("AAA", "BBB", "CCC"), container = gwindow()) 
Problemi correlati