#r #dataframe #loops #shiny
#r #фрейм данных #циклы #блестящий
Вопрос:
Для простого приложения в Shiny я хочу использовать пользовательский ввод, выполнять с ним простые арифметические операции и сохранять результаты в фрейме данных с общей целью затем отобразить его, сравнив результаты из первого столбца со вторым столбцом для x = 1: 60.
Будучи новичком в Shiny, я с трудом справляюсь с реактивной частью в цикле, поэтому мой код в настоящее время выглядит как простой метод выполнения операции в R и якобы не работает.
Любой намек на сохранение реактивных значений в фрейме данных будет оценен.
В упрощенном виде мой код выглядит так:
ui <- fluidPage(
numericInput("In1", "Input 1", 60),
numericInput("In2", "Input 2", 100),
numericInput("In3", "Input 3", 100)
mainPanel(plotOutput("plot))
)
_______
server <- function(input, output) {
data1 <- reactive({
data1 <- data.frame(x = 0, y = 1:60)
data1[1, 1] = (input$In1 * 4 * 12)/input$In3
data1[1, 2] = (input$In2 * 4 * 12)/input$In3
for (i in 2:60) {
data1[i,1] = (input$In1 * 4 * 12)/input$In3) data1[i-1]
data1[i,2] = (input$In2 * 4 * 12)/input$In3) data1[i-1]
}})
output$plot <- renderPlot({...})
Ответ №1:
Вы можете написать приложение как :
library(shiny)
ui <- fluidPage(
numericInput("In1", "Input 1", 60),
numericInput("In2", "Input 2", 100),
numericInput("In3", "Input 3", 100),
mainPanel(tableOutput("data"))
)
server <- function(input, output) {
data1 <- reactive({
data1 <- data.frame(x = 0, y = 1:60)
data1[1, 1] = (input$In1 * 4 * 12)/input$In3
data1[1, 2] = (input$In2 * 4 * 12)/input$In3
for (i in 2:60) {
data1[i,1] = ((input$In1 * 4 * 12)/input$In3) data1[i-1, 1]
data1[i,2] = ((input$In2 * 4 * 12)/input$In3) data1[i-1, 2]
}
return(data1)
})
#output$plot <- renderPlot({...})
output$data <- renderTable({data1()})
}
shinyApp(ui, server)
Я не включил никакого кода графика, а вместо этого отобразил фрейм данных, но вы также можете включить вывод графика так, как хотите.