使用 R 中的列名渲染因子

Posted

技术标签:

【中文标题】使用 R 中的列名渲染因子【英文标题】:Rendering factors using column names in R 【发布时间】:2016-05-08 23:40:36 【问题描述】:

我正在构建一个闪亮的应用程序。我想为所选的每一列呈现因子。为此,我有两个 selectInput 小部件。第一个渲染列名,第二个渲染第一个小部件选择的列的因子。我编写的代码没有渲染因子,而在闪亮的环境之外也一样。代码如下:

第一次选择输入:

observe(
       updateSelectInput(session, "filt", choices = sort(as.character(colnames(s()))))    
   )

第二个 selectInput - 返回在 'filt' selectInput 中选择的列的因子。

observe(
           updateSelectInput(session, "filt1", choices = sort(as.character(unique(s()$input$filt)))) 
   )

一个可重现的表:

structure(list(Gender = structure(c(2L, 1L, 2L, 2L, 2L), .Label = c("Female", 
"Male"), class = "factor"), AGE = c(20L, 20L, 15L, 16L, 13L), 
    BOTTLE_CNT = c(3L, 0L, 0L, 1L, 2L), QUALIFICATION_DESC = structure(c(2L, 
    2L, 1L, 2L, 2L), .Label = c("12th and below", "Graduation"
    ), class = "factor")), .Names = c("Gender", "AGE", "BOTTLE_CNT", 
"QUALIFICATION_DESC"), class = "data.frame", row.names = c(NA, 
-5L))

我想要的是,如果我在第一个 selectInput 中选择 Gender,则应在第二个 selectInput 中自动呈现男性和女性选项。

我没有得到渲染的因素。不知道哪里出错了。

【问题讨论】:

【参考方案1】:

将第一个 selectInput 的 ID 添加到第二个观察:

observe(
   input$filt, updateSelectInput(
                   session, "filt1",
                   choices = sort(as.character(unique(s()$input$filt)))) 
)

这可能会有所帮助。

【讨论】:

谢谢@ranklord ...我尝试了您的解决方案,但出现以下错误ERROR: [on_request_read] connection reset by peer。但是,我确实通过在指定“选择”时使用 if 条件来管理呈现正确的值。内容如下:choices = if (input$filt == "Age") sort(unique(as.character(s()$Age))) else if。虽然这很长,尤其是要渲染的变量数量,但它确实有效。但是,我不知道你的方法,我相信它会在不同的场合派上用场。非常感谢您的帮助。 嗯,你找到了有趣的解决方案!感谢分享!!我的解决方案来自 Shiny cheatsheet - shiny.rstudio.com/articles/cheatsheet.html

以上是关于使用 R 中的列名渲染因子的主要内容,如果未能解决你的问题,请参考以下文章

R中的鬼因子水平[重复]

为啥R中的回归会删除因子变量的索引1? [复制]

如何在 R 中的 emmeans() 命令中评估字符串变量作为因子?

ifelse 按 r 中的列位置 - 列名未知 [重复]

列名的 R 中的 histChanging 类

将向量中的值粘贴到 R 中的列名