Как я могу построить график в соответствии с данными, предоставленными пользователем?

#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

  1. В этом numericInput случае value аргумент также будет числовым , а не строковым ( " " )
  2. Не ясно, почему renderPrint был инициирован server без соответствующего ui элемента
  3. Функции были созданы 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)
 

-выход

введите описание изображения здесь