使用 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 中的列名渲染因子的主要内容,如果未能解决你的问题,请参考以下文章