0
編輯以反映正在進行的討論。有條件聲明和嵌套Shiny
從我的服務器部分,我想用不同的公式,取決於單選按鈕選擇這就是所謂的input$beamSupport
,進而改變配方,取決於x
值。然而,我堅持使用語法。
我也知道我可以通過簡單地聲明「else ...」來修飾一些代碼,但是我想有可能擴展。
現在我得到錯誤信息「中,如果錯誤:參數爲長度爲零」
library(shiny)
ui <- fluidPage(
# Style tags for changing the slider
tags$style(HTML(".irs-bar {background: none}")),
tags$style(HTML(".irs-bar {border-top: none}")),
tags$style(HTML(".irs-bar {border-bottom: none}")),
tags$style(HTML(".irs-bar-edge {border: none}")),
tags$style(HTML(".irs-bar-edge {background: none}")),
mainPanel(
titlePanel("Beam Deflection Calculator"),
radioButtons("beamSupport",
label = ("Beam support type"),
choices = list("Simply supported" = 1,
"Cantilever" = 2),
selected = 1),
numericInput("num_W", # Load force, W
label = "Enter load force in N.",
value = 1),
numericInput("num_l", # Length of beam, l
label = "Enter beam length in m.",
value = 10),
numericInput("num_I", # Intertial moment, I (caps i)
label = "Enter moment of inertia in m^4.",
value = 0.001),
numericInput("num_E",
label = "Enter Young's modulus in GPa.",
value = 200),
uiOutput("slider"), # Sliders for a and x
textOutput("text_calc")
)
)
server <- function(input, output, session) {
output$slider <- renderUI({
tagList(# Need this for multiple reactive sliders
sliderInput("slider_a",
label = "Choose position, where to apply force, starting from left, in m.",
min = 0,
max = input$num_l,
value = 5,
step = 0.1),
sliderInput("slider_x",
label = "Calculate the deflection, at position starting from left, in m.",
min = 0,
max = input$num_l,
value = 5,
step = 0.1)
)
})
output$text_calc <- renderText({
W <- input$num_W
l <- input$num_l
I <- input$num_I
E <- input$num_E * 10^9
a <- input$slider_a
x <- input$slider_x
cond <- x < a
if (input$beamSupport == 1){
if (cond){
return(paste("The deflection is =",
((W*(l-a)*x)/(6*E*I*l))*(l**2-x**2-(l-a)**2)
))
}
else{
return(paste("The deflection is =",
((W*a*(l-x))/(6*E*I*l))*(l**2-(l-x)**2-a**2)
))
}
}
if (input$beamSupport == 2){
if (cond){
return(paste("The deflection is =",
((W*x**2)/(6*E*I))*(3*a-x)
))
}
else{
return(paste("The deflection is =",
((W*a**2)/(6*E*I))*(3*x-a)
))
}
}
})
}
shinyApp(ui = ui, server = server)
謝謝!它現在似乎工作。我仍然得到*「警告:錯誤在if:參數的長度爲零」*雖然。這是什麼意思? –
如果你運行我的代碼,一切工作正常,你必須做一些額外的事情。這意味着你沒有照顧'null',比如:'if(input $ SOME_INPUT == null){return()} –
我找不到錯誤。我已經完成了與你完全相同的事情,除了一些重命名。所有參數都有非零的默認值,所以我需要包含null的位置?全部輸出是'堆棧跟蹤(最內第一): 79:renderText [〜/桌面/ beamDeflection/beamDeflection.R#85] 78:FUNC 77:origRenderFunc 76:輸出$ text_calc 1:runApp' –