r - 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"
如果有人能帮我解决这个问题,我将不胜感激......
解决方案
我认为正确的做法是
levels(cls.0) = sapply(1:l2, function(j){input[[paste0("col_", j)]]})
因为因子的级别只是字符串的向量。
推荐阅读
- javascript - 如何将悬停 jquery 转换为 js 纯?
- c# - 在 Y 次无效尝试并且 userManager.IsLockedOutAsync 为 false 后将 ASP.NET 登录用户锁定 X 分钟
- saxon - 在 XSLT 3.0 中使用流的更好方法
- flutter - 有什么方法可以在颤振项目中使用 libVLC 吗?
- arrays - 需要在 Powershell 中以更快的方式将大型数组合并到单个二维数组中
- xml - 类型不匹配:scala.xml.NodeBuffer vs Seq[scala.xml.Node]
- python - 如何从熊猫数据框中的当前行中减去前一行以创建一个新列,以每个名称重新启动进程?
- python - 自定义 jupyter notebook 的打印版本
- c# - SendGrid 电子邮件 - RegisterConfirmation - 电子邮件未收到
- python - Python:将列中的行相乘并将其整合