#r #shiny
Вопрос:
Я использую numericImput
для получения данных, введенных пользователем.
Я пытаюсь построить график баллистической кривой движения объекта, описываемой вводом пользователя (пользователь указывает значение начальной скорости, измерения угла, времени полета и константы k), но я не могу решить ошибку 🙁
Любая помощь будет признательна! 😀
Вот мой код
library(shiny)
ui <- fluidPage(
titlePanel("Movimiento de Projectiles"),
sidebarLayout(
sidebarPanel(
width = 2,
numericInput(inputId = "v",
label = "Velocidad",
value = " "),
numericInput(inputId = "th",
label = "Angulo",
value = " "),
numericInput(inputId = "tf",
label = "Tiempo",
value = " "),
numericInput(inputId = "k",
label = "Constante k",
value = " ")
),
mainPanel(
plotOutput("posicion")
)
)
)
server <- function(input, output) {
v <- renderPrint({ input$v })
th <- (renderPrint({ input$th}))
t<-renderPrint({ input$tf })
k<-renderPrint({ input$k })
output$posicion <- renderPlot({
# Para x
vx<-function(v,th){
input$v*cos(input$th*((2*pi)/360))
}
x<-function(t){
vx*input$t
}
## Para y
vy<-function(v,th){
input$v*sin(input$th*((2*pi)/360))
}
y<-function(t){
(vy*input$t)-(0.5*g*t*t)
}
# Dibujamos el grafico de X v.s. Y
plot(x)
})
}
shinyApp(ui = ui, server = server)
Комментарии:
1. вы создаете функции, но они не вызываются
2. что
g*t*t
этоinput$t
такое и не уверен в этомg
Ответ №1:
Есть несколько проблем в ui
и в server
- В этом
numericInput
случаеvalue
аргумент также будет числовым , а не строковым (" "
) - Не ясно, почему
renderPrint
был инициированserver
без соответствующегоui
элемента - Функции были созданы
server
без его вызова.
Ниже приведен минимальный код, который выдает результат, внеся пару изменений
- изменил
value = " "
начальное значение на числовое - добавлен
verbatimTextOutput
ui
для печатиrenderPrint
вызываемого сервера - удалил эти несколько функций, созданных и упрощенных с помощью одного выражения, чтобы
plot
library(shiny)
ui <- fluidPage(
titlePanel("Movimiento de Projectiles"),
sidebarLayout(
sidebarPanel(
width = 2,
numericInput(inputId = "v",
label = "Velocidad",
value = 22),
numericInput(inputId = "th",
label = "Angulo",
value = 15),
numericInput(inputId = "tf",
label = "Tiempo",
value = 41),
numericInput(inputId = "k",
label = "Constante k",
value = 32)
),
mainPanel(
plotOutput("posicion"),
verbatimTextOutput("v"),
verbatimTextOutput("th"),
verbatimTextOutput("tf"),
verbatimTextOutput("k")
)
)
)
server <- function(input, output) {
output$v <- renderPrint({ input$v})
output$th <- (renderPrint({ input$th}))
output$tf<-renderPrint({ input$tf })
output$k<-renderPrint({ input$k })
output$posicion <- renderPlot({
plot(input$v* cos(input$th*((2*pi)/360)) * input$th)
})
}
shinyApp(ui = ui, server = server)
-выход