R-Shiny报错「NAs introduced by coercion」求助:输入参数处理问题
解决Shiny中selectInput输入无法被自定义函数解析的NA警告问题
嘿,我之前也踩过一模一样的坑!你看到的NAs introduced by coercion警告,本质就是selectInput返回的是字符型值,但你的自定义函数cc需要的是数值型参数,直接传进去就会触发强制转换失败,生成NA值。
给你几个直接能用的解决办法:
方法1:调用函数前强制转换输入类型
在reactive表达式里调用cc之前,把input$Atacante和input$Defensor转成数值型:
library(shiny) server <- function(input, output) { damage <- reactive({ Mob1<- c(40,40,45) Mob2<-... # 你的其他业务代码 # 先把selectInput的输入转成数值 atacante_num <- as.numeric(input$Atacante) defensor_num <- as.numeric(input$Defensor) # 再传入cc函数 cc(atacante_num, input$Tirada_At, defensor_num, input$Tirada_Def) }) }
方法2:直接设置selectInput的数值型选项值
如果你的selectInput是类似这样的写法(选项显示文字但值是字符):
selectInput("Atacante", "选择攻击者", choices = c("怪物1" = "40", "怪物2" = "45"))
改成用数值作为选项的实际值:
selectInput("Atacante", "选择攻击者", choices = c("怪物1" = 40, "怪物2" = 45))
这样input$Atacante会直接返回数值,不用额外转换就能被cc函数识别。
方法3:在自定义函数cc内部做类型校验
给cc函数加个开头的类型检查,提前处理转换失败的情况:
cc <- function(atacante, tirada_at, defensor, tirada_def) { # 统一转换为数值型 atacante <- as.numeric(atacante) defensor <- as.numeric(defensor) # 检查是否有转换失败的NA if (any(is.na(c(atacante, defensor)))) { warning("输入值无法转换为数值,请检查选择的选项") return(0) # 这里可以换成你需要的默认返回值 } # 后面是你的函数核心逻辑... }
另外小提醒:如果你的selectInput选项值本身包含非数字内容(比如"怪物1-40"这种带文字的),那转换肯定会出NA,这时候得先调整选项值的设置,确保实际传递的是纯数字内容。
内容的提问来源于stack exchange,提问作者Nadrieci
相关产品推荐
相关产品推荐

