2013-01-15 1 views
2

J'essaie de convertir des niveaux de facteur dans une liste afin de créer une entrée dynamique pour une fonction SelectInput dans R Shiny.Convertir les niveaux de facteur en listes à utiliser dans une entrée dynamique dans R Shiny

Fondamentalement, j'importe un fichier CSV et je voudrais créer la liste déroulante dans SelectInput en utilisant les "catégories" (niveaux) dans la première colonne du fichier CSV.

Ainsi, UI.RI ont:

uiOutput("categoryPicker") 

Et server.RI ont:

datatwo <- read.csv(file="data2.csv",head=TRUE,sep=",") 

puis, dans la section "shinyServer (fonction (entrée, sortie)" (» catégorie » est un en-tête dans le fichier CSV, en passant):

output$categoryPicker <- reactiveUI(function() { 
categories <- levels(datatwo$category) 
selectInput("category", "Category:", categories) 
}) 

Cela ne fonctionne pas, me donne l'erreur suivante:

Error in choices[[choiceName]] : subscript out of bounds

La str (catégories) de sortie est la suivante:

chr [1:22] "" "Cat1" "Cat2" "Cat3" "Cat4" "Cat5" ...

Si je fais "liste (niveaux (Datatwo catégorie $)", il me donne juste une goutte vers le bas, ce qui est l'ensemble str (catégories) sortie:

List of 1 $ : chr [1:22] "" "Cat1" "Cat2" "Cat3" ...

Je suis en train d'obtenir ce sous la forme de (telle que, lorsque str (x) est fait la sortie serait):

List of X
$ Cat1: chr "Cat1"
$ Cat2: chr "Cat2"
$ Cat3: chr "Cat3"
...

Mais je ne suis pas sûr de savoir comment faire cela. Je ne sais pas non plus pourquoi le premier élément est un "" [chaîne vide]. Je suis assez nouveau à R et Shiny alors pardonnez mon ignorance, mais toute aide serait grandement appréciée.

BTW, je travaille de ce tutoriel: http://rstudio.github.com/shiny/tutorial/#dynamic-ui

Merci.

+0

S'il vous plaît donner un exemple reproductible au lieu des extraits de code. –

+3

première supposition, peut-être vous avez besoin d'utiliser 'as.list' sur' categories', au lieu de 'list'? –

Répondre

3

Je ne sais pas si les noms de la liste sont importants ou non, mais cela devrait vous donner ce que vous voulez:

setNames(as.list(categories), categories) 
Questions connexes