R shiny 中的级别替换创建两个级别列表,一个为 NULL

Posted

技术标签:

【中文标题】R shiny 中的级别替换创建两个级别列表,一个为 NULL【英文标题】:Level replacement in R shiny creates two level lists, one with NULL 【发布时间】:2021-03-06 07:15:57 【问题描述】:

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

基于上传的 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"

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

【问题讨论】:

在 output$setting 中尝试 req()output$setting &lt;- renderPlot( req(garnetRF()) l2 = length(unique((... 没有任何变化 【参考方案1】:

我认为正确的做法是

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

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

【讨论】:

当使用这个时,我得到这个错误:rep.int 中的错误:无效的 'times' 值 您知道如何解决这个无效的“times”值错误以及它的来源吗? 查看l2,可能是0? l2 在这种情况下是 3

以上是关于R shiny 中的级别替换创建两个级别列表,一个为 NULL的主要内容,如果未能解决你的问题,请参考以下文章

使用两个相关的 selectInput 过滤 R Shiny 中的数据帧

r 将列表名称与列表级别组合以模仿R中的摘要(lm(...))对象的系数输出(也称为smushed变量名称)

从嵌套字典结构列表(具有两个级别)创建数据框的 Pythonic 方法是啥?

根据 R Shiny 中的其他选择动态更新两个 selectInput 框

动态替换 R Shiny 数据表中的选项

仅当使用 LayersControl 的缩放级别> 8 时,才在 Shiny 的传单地图中显示图层?