为何as.factor()在Shiny响应式表达式中结果异常,基础R中正常?
问题原因与解决办法
你的问题核心是Shiny的输入值和直接写列名的本质不一样:
- 外部直接写
as.factor(sex),是直接调用lung数据框里的sex列; - 但Shiny里
input$varCon返回的是字符串(比如你选了"sex",它的值就是字符串"sex"),你直接写as.factor(input$varCon),等于把字符串"sex"转成因子,每一行的group都是同一个因子水平"sex",结果自然异常。
解决办法很简单,用dplyr提供的.data代词来引用列:
lung %>% mutate(group = as.factor(.data[[input$varCon]]))
或者用rlang包的符号转换(需要先加载rlang):
library(rlang) lung %>% mutate(group = as.factor(!!sym(input$varCon)))
这两种写法都是把字符串形式的列名,转换成dplyr能识别的列引用,和你外部直接写sex的效果完全一致。
内容的提问来源于stack exchange,提问作者Village.Idyot
相关产品推荐
相关产品推荐

