2016-01-28 2 views
0

У меня проблема с моим блестящим кодом R. Я не знаю, как создать двойной цикл, который близок к значениям, введенным пользователем. В нем говорится: «Ошибка в < -: несовместимые типы (от замыкания до двойного) в определении типа переназначения« BTW: Является ли блестящим правильный пакет для меня, когда я просто хочу создать приложение для пользовательских входов?R Shiny for loop

shinyServer(
function(input, output){ 


sum1 <- reactive(input$sum1) 
weight1 <- 0.7 
weight2 <- 1-weight1 

asset1 <- reactive({sum1()*weight1}) 

asset2 <- reactive({sum1()*weight2}) 



counter1 <- reactive(input$counter1) 
counter2 <- reactive(input$counter2) 

for (j in 1:counter1) { 
    start <- reactive(sum1()) 
    for (i in 1:counter2) { 
    start <- reactive({asset1()*asset2*rnorm(1, mean <- 0, sd <- 1)}) 
    value1[j] <- start 
} 

    result1 <- quantile(value1, c(0.01)) 
    output$result1 <- value1 

} 
) 



library(shiny) 

shinyUI(fluidPage(

titlePanel(title = "Simulation"), 
sidebarLayout(
sidebarPanel(("Data"), 
      numericInput("sum", "sum:", 0, min=0, max=1000000), 
      numericInput("counter1", "counter1", 0, min=0, max=1000), 
      numericInput("counter2", "counter2", 0, min=0, max=1000), 

      submitButton("submit")), 

mainPanel(("Results:"), 
     textOutput("result1"), 



     ) 

) 

)) 

Благодарим за помощь!

+0

'counter1' и' counter2' необходимо вызывать круглыми скобками. Кроме того, 'start'. Не уверен, что определение реактивной функции в цикле for работает так, как я ее никогда не пробовал, но вы можете проверить. – Gopala

+0

@ user3949008 Извините, я не могу понять ваш комментарий. Можете ли вы привести пример моего кода? – Florian

ответ

0

У вашего кода было несколько проблем: дополнительные запятые, закрытые скобки. Я думаю, что отсутствующая скобка на shinyServer является причиной того, что ваш сервер не отвечает на пользователя.

Другое дело, что вы передали все свои input s до reactive. Вы можете использовать значения input напрямую. И поскольку @ user3949008 сказал, я не знаю, можете ли вы определить reactive в цикле. Вот один из возможных кодов:

server<-shinyServer(
    function(input, output) { 
    weight1 <- 0.7 
    weight2 <- 1 - weight1 

    asset1 <- reactive({ input$sum * weight1 }) 
    asset2 <- reactive({ input$sum * weight2 }) 

    output$result <- renderText({ 
     for (j in 1:input$counter1) { 
     start <- input$sum 
     for (i in 1:input$counter2) { 
      start <- asset1() * asset2() * rnorm(1, mean=0, sd=1) 
      value1 <- start 
     } 
     result1 <- quantile(value1, c(0.01)) 
     outputresult1 <- value1 
     } 
     paste("Results:", outputresult1) 
    }) 
    } 
) 

library(shiny) 
ui <- shinyUI(
    fluidPage(
    titlePanel(title = "Simulation"), 
    sidebarLayout(
     sidebarPanel(
     "Data", 
     numericInput("sum", "sum:", 0, min=0, max=1000000), 
     numericInput("counter1", "counter1:", 0, min=0, max=1000), 
     numericInput("counter2", "counter2:", 0, min=0, max=1000) 
    ), 
     mainPanel(
     textOutput("result") 
    ) 
    ) 
) 
) 

shinyApp(ui,server)