2010-08-26 19 views
5

Estoy usando el siguiente código para la aplicación de precio compartido que he estado desarrollando (¡con mucha ayuda de la gente de aquí que es muy apreciada!). Una de las cosas que debe hacer es permitir al usuario elegir una empresa para analizar a partir de archivos XML almacenados, He estado usando el siguiente código para hacer esto:Implementación de la lista desplegable en R

df <- xmlToDataFrame(file.choose()) 

En lugar de utilizar file.choose() {como aparentemente el cuadro de diálogo revela gran parte de la estructura del sistema}, se ha sugerido usar un menú desplegable, con una lista de las compañías y un enlace al archivo.

¿Es posible esto en R y existe una forma sencilla de implementarlo?

+0

Hay list.files() que enumera todos los archivos del directorio, por ejemplo: list.files (getwd()) lo limitaría a su directorio de trabajo. Lo sé, todavía no es interactivo, pero tal vez hagas algo al respecto. Tal vez con la ayuda del built-in http helpserver. –

+0

Consulte [esto] (http://bioinf.wehi.edu.au/~wettenhall/RTclTkExamples/DropDown.html). También esta [pregunta relacionada] (http://stackoverflow.com/questions/2540232/how-to-allow-multiple-inputs-from-user-using-r). –

Respuesta

7

select.list le permiten seleccionar de una lista. Verifique también menu.

Ejemplos:

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

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

Si desea mostrar el nombre y enlace en la lista a continuación, utilizar

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

Ok, eso funciona desde dentro de R. Sin embargo, cuando lo ejecuto desde el archivo Batch utilizando Rscript, no funciona. ¿Hay paquetes adicionales/código que debería usar? –

+0

'xmlToDataFrame' está en el paquete' RSXML'. ¿Lo tiene instalado para la versión de R a la que llama en modo por lotes? –

+0

@Anthony No. Se espera un comportamiento. Desde '? Menu':" Es un error utilizar 'menu' en una sesión no interactiva.". Podría intentar 'tk_select.list' del paquete tcltk. – Marek

3

Si no desea ingresar a la programación tcltk, pruebe los paquetes gWidgets.

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