2016-10-26 3 views
0

Я делаю следующее:Как вернуть несколько значений в R ShinyServer

  1. с помощью R ShinyUI, получают клиентские входы на диапазоны переменных A, B, C;
  2. в R ShinyServer, прочитайте в CSV-файле и используя клиентские входы, чтобы нарезать csv, и получите часть, которая мне нужна;
  3. Выполните вычисление цикла на csv, вычислите различные статистические данные из выходного цикла и постройте всю эту статистику.

псевдокод:

data = read.csv('file.csv') 

shinyServer(function(input, output) { 

    data <- reactive({ 
    data = data[data$A<INPUT1 & data$B> INPUT2 & data$C<INPUT3,] 
    }) 

for (i in 1:dim(data)[1]){ 
    result1[i] = xxx 
    result2[i] = xxx 
    } 


    output$plot <- renderPlot({ 
    plot(result1) 
    }) 

}) 

Приведенные выше код не работает. Я хочу знать:

  1. Как правильно включать ввод данных пользователя и получить переменные «данные»
  2. Как построить result1 и result2 от выходного $ участка

Спасибо!

+0

Я не совсем понимаю ваш вопрос, но если предположить, что «INPUT» - это блестящие элементы пользовательского интерфейса, вы обращаетесь к ним с помощью 'input $ inputname'. Для чтения в csv вам нужен 'fileInput()' в вашем пользовательском интерфейсе и что-то, чтобы поймать его на сервере, например 'data <- read.csv (input $ inputname $ datapath)'. См. Здесь: http://shiny.rstudio.com/gallery/upload-file.html – Rupert

ответ

0

Петля для петли должна быть внутри renderPlot, поэтому каждый раз, когда изменяется input$month, реактивные данные будут меняться, а затем команда lop обновит ваши переменные. Если у вас есть цикл for вне реактивного выражения, он будет выполнен только один раз, когда приложение запустится, но после изменений в input.

Ниже приведен простой пример, основанный на псевдокоде, предоставленном в исходном вопросе, чтобы проиллюстрировать возможное решение.

library(shiny) 

ui <- shinyUI(fluidPage(
    fluidRow(
    column(4, 
     numericInput("input1", "Speed >", 8), 
     numericInput("input2", "Dist >", 15) 
    ), 
    column(8, 
     plotOutput("plot") 
    ) 
) 
)) 

server <- shinyServer(function(input, output) { 
    dat0 <- cars 

    data <- reactive({ 
    dat0[dat0$speed > input$input1 & dat0$dist > input$input2,] 
    }) 

    output$plot <- renderPlot({ 
    s <- dim(data())[1] 
    result1 <- numeric(s) 
    result2 <- numeric(s) 
    for (i in 1:s){ 
    result1[i] <- data()[i, 1] 
    result2[i] <- data()[i, 2] 
    } 
    plot(result1, result2) 
    }) 

}) 

shinyApp(ui = ui, server = server) 
Смежные вопросы