将因子级别转换为列表,以便在R Shiny中用于动态输入

时间:2013-01-15 21:12:47

标签: r shiny

我正在尝试将因子水平输出转换为列表,这样我就可以为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

感谢。

1 个答案:

答案 0 :(得分:3)

我不知道列表中的名字是否重要,但这可以给你你想要的东西:

setNames(as.list(categories), categories)