我正在尝试将因子水平输出转换为列表,这样我就可以为R Shiny中的SelectInput函数创建动态输入。
基本上,我导入CSV文件,并希望使用CSV文件第一列中的“类别”(级别)在SelectInput中创建下拉列表。
所以,在UI.R中我有:
uiOutput("categoryPicker")
在server.R中我有:
datatwo <- read.csv(file="data2.csv",head=TRUE,sep=",")
然后,在“shinyServer(函数(输入,输出)”部分(“类别”是CSV文件中的标题,顺便说一下):
output$categoryPicker <- reactiveUI(function() {
categories <- levels(datatwo$category)
selectInput("category", "Category:", categories)
})
这不起作用,给我以下错误:
选项[[choiceName]]出错:下标超出范围
str(类别)输出如下:
chr [1:22]“”“Cat1”“Cat2”“Cat3”“Cat4”“Cat5”......
如果我执行“list(levels(datatwo $ category)”,它只给我一个下拉列表,这是整个str(类别)输出:
清单1 $:chr [1:22]“”“Cat1”“Cat2”“Cat3”......
我试图以(以便在完成str(x)时输出的形式得到这个):
X的清单 $ Cat1:chr“Cat1”
$ Cat2:chr“Cat2”
$ Cat3:chr“Cat3”
...
但我不知道该怎么做。我也不确定为什么第一项是“”[空字符串]。我对R和Shiny很新,所以请原谅我的无知,但任何帮助都会非常感激。
顺便说一句,我一直在研究这个教程: http://rstudio.github.com/shiny/tutorial/#dynamic-ui
感谢。
答案 0 :(得分:3)
我不知道列表中的名字是否重要,但这可以给你你想要的东西:
setNames(as.list(categories), categories)