我刚开始用Shiny。
当我尝试启动代码时,我收到以下错误:
在cc中收听http://127.0.0.1:3626警告(输入$ Atacante, 输入$ Tirada_At,输入$ Defensor,输入$ Tirada_Def):引入NAs 通过强制警告cc(输入$ Atacante,输入$ Tirada_At, 输入$ Defensor,输入$ Tirada_Def):由强制引入的NA
问题在于功能要求的非数字参数。来自selectImput的id为“Atacante”和“Defensor”的输入在我的函数中没有得到很好的处理。我一直在尝试一些改变但是没有用。如果有人可以帮助我,我会非常感激。 (我为那些怪异的条款道歉)
这是服务器:
library(shiny)
server <- function(input, output) {
damage <- reactive({
Mob1<- c(40,40,45)
Mob2<- c(10,10,10)
cc <- function(Atacante,Tirada_At,Defensor,Tirada_Def){
Valores_at<-as.numeric(Atacante[1:3])
Ataque_final<-Valores_at[1]+Tirada_At
Valores_def<-as.numeric(Defensor[1:3])
Defensa_final<-Valores_def[2]+Tirada_Def
res_sin_abs<- (Ataque_final - Defensa_final)
}
cc(input$Atacante,input$Tirada_At,input$Defensor,input$Tirada_Def)
})
output$dam <- renderTable({
damage()
})
}
这是UI:
ui <- fluidPage(
titlePanel("Combate"),
sidebarLayout(
sidebarPanel(
sliderInput("Tirada_At", "Tirada atacante:",
min = -100, max = 200,
value = 50),
sliderInput("Tirada_Def", "Tirada Defensor:",
min = -100, max = 200,
value = 50),
selectInput(inputId= "Atacante", label="Atacante:",choices = c("Mob1","Mob2")),
selectInput(inputId="Defensor", label="Defensor:", choices = c("Mob1","Mob2"))
),
mainPanel(
tableOutput("dam")
)
)
)
答案 0 :(得分:0)
首先,您可以将browser()
放入反应式表达式和观察者中来调试这样的闪亮应用
damage <- reactive({
Mob1<- c(40,40,45)
Mob2<- c(10,10,10)
cc <- function(Atacante,Tirada_At,Defensor,Tirada_Def){
browser()
Valores_at<-as.numeric(Atacante[1:3])
Ataque_final<-Valores_at[1]+Tirada_At
Valores_def<-as.numeric(Defensor[1:3])
Defensa_final<-Valores_def[2]+Tirada_Def
res_sin_abs<- (Ataque_final - Defensa_final)
}
cc(input$Atacante,input$Tirada_At,input$Defensor,input$Tirada_Def)
})
现在运行应用程序将为您提供探索此类输入的当前值的选项。
## Called from: cc(input$Atacante, input$Tirada_At, input$Defensor, input$Tirada_Def)
Browse[1]> Valores_at<-as.numeric(Atacante[1:3])
## Warning: NAs introduced by coercion
Browse[1]> Atacante[1:3]
## [1] "Mob1" NA NA
Browse[1]> Atacante
## [1] "Mob1"
Browse[1]> get(Atacante)
## [1] 40 40 45
正如您所看到的,Atacante
是一个长度为1的字符向量,用于保存UI中的选择。如果您想使用Mob1 <- ...
获取之前定义的vercor,可以使用get
。
我个人不喜欢在我的项目中使用get
所以我在这里编写代码
damage <- reactive({
mobs <- data.frame(
Mob1 = c(40, 40, 45),
Mob2 = c(10, 10, 10)
)
cc <- function(Atacante, Tirada_At, Defensor, Tirada_Def){
Valores_at <- mobs[[Atacante]]
Ataque_final <- Valores_at[1] + Tirada_At
Valores_def <- mobs[[Defensor]]
Defensa_final <- Valores_def[2] + Tirada_Def
res_sin_abs <- (Ataque_final - Defensa_final)
}
cc(input$Atacante, input$Tirada_At, input$Defensor, input$Tirada_Def)
})