首页 > 解决方案 > R shiny 中的级别替换创建两个级别列表,一个为 NULL

问题描述

我第一次在一个闪亮的应用程序上工作。

基于上传的 xlsx,闪亮的应用程序创建一个名为garnetRF(). 根据上传的 xlsx 中不同命名样本的数量,应用程序会在output$tabp. 在选项卡中,用户可以选择要为每个样本显示的颜色。到目前为止,一切都很好。

现在,在ouput$setting我想用用户选择的颜色绘制结果。因此,我的想法是通过选择的颜色名称 ( cls.0) 重命名样本级别。但是,当执行如下代码时,会生成两个级别的列表,我不明白为什么:

output$tabp <- renderUI({
    req(garnetRF())
    l = length(unique((garnetRF()[,"sample"])))
    
    myTabs <- lapply(1:l, function(i) {
      tabPanel(title = as.list(factor(unique(garnetRF()[,"sample"])))[[i]],
               colourInput(paste0("col_", i), NULL, paste0("FF000", i), showColour = "background")
      )
    })
    do.call(tabsetPanel, myTabs)
  })
  
  output$setting <- renderPlot({
    l2 = length(unique((garnetRF()[,"sample"])))
    cls.0 = factor((garnetRF()[,"sample"]))
    levels(cls.0) = factor((sapply(1:l2, function(j){input[[paste0("col_", j)]]})))
    print(levels(cls.0))
[1] "NULL"
[1] "#FF0001" "#FF0002" "#FF0003"

如果有人能帮我解决这个问题,我将不胜感激......

标签: rshiny

解决方案


我认为正确的做法是

levels(cls.0) = sapply(1:l2, function(j){input[[paste0("col_", j)]]})

因为因子的级别只是字符串的向量。


推荐阅读