RShiny: числовое преобразование checkboxInput не работает в методологии подсчета очков

Я хочу использовать checkboxInput, чтобы указать, какие переменные должны быть включены в методологию оценки (т. Е. Иметь возможность при желании исключить некоторые переменные). Я хочу, чтобы checkboxInput был преобразован в 0 или 1, и это число будет использоваться в алгоритме подсчета очков.

Я знаю, что методология оценки работает, потому что она будет работать, когда у меня выбраны переменные по умолчанию, которые игнорируют checkboxInput, но не с этими ручными флажками.

Буду очень признателен за любую помощь. Ниже приведена не точная копия кода; просто упрощенная версия, чтобы сделать это легче для читателей. Если это слишком упрощено, дайте мне знать; фактический код довольно сложен, но я хочу выделить простую проблему, которая вызывает у меня такую ​​головную боль по неизвестной причине. Благодарю вас!

Я пытался сделать checkboxInput реактивной переменной (переменными), я превратил их в целые числа и т. Д. Я чувствую, что мне не хватает чего-то очевидного.

Вот код:

ui:

    (
        uiOutput('variable1selected'),  
        uiOutput('variable2selected'), 
        uiOutput("variable3selected")
    )

сервер:

    output$variable1selected = renderUI({
        checkboxInput("variable1selected",
            "Include Variable 1 in Analysis",
             value=TRUE)
    })
    output$variable2selected = renderUI({
        checkboxInput("variable2selected",
            "Include Variable 2 in Analysis",
            value=TRUE)
    })
    output$variable3selected = renderUI({
        checkboxInput("variable3selected",
        "Include Variable 3 in Analysis",
        value=TRUE)
    })

    variable1selected = as.integer(input$variable1selected)
    variable2selected = as.integer(input$variable2selected)
    variable3selected = as.integer(input$variable3selected)

    Score = variable1selected*10 + variable2selected*20 + 
        variable3selected*30

Сообщений об ошибках нет, просто вообще не засчитывается, когда выбран checkboxInput. Я ожидаю оценки для каждой строки, а затем сортирую таблицу по этой оценке. На самом деле создается несортированная таблица, потому что нет оценки для сортировки (переменная «Оценка» имеет значение NA для каждой строки).


person UNLVStudent1992    schedule 21.08.2019    source источник
comment
Разве оценка не должна рассчитываться внутри реактивного контекста?   -  person cory    schedule 21.08.2019
comment
Привет @cory, спасибо, что заглянули. Раньше checkboxInput был числовым вводом, где я вводил значения для переменных вручную (0 или 1). Затем я бы добавил эти числа в метод подсчета очков, аналогичный приведенному выше. Мне не нужно было реактивное выражение для этого счета. Реактивные выражения здесь — мои последние попытки решить проблему. Я попытаюсь сделать счет реактивным, но кроме этого похоже, что что-то нужно изменить? Еще раз спасибо!   -  person UNLVStudent1992    schedule 21.08.2019


Ответы (1)


Функция reactive() будет вашим лучшим другом в этом. Вы почти достигли того, что хотели сделать:

library(shiny)

ui <- fluidPage(
    uiOutput('variable1selected'),  
    uiOutput('variable2selected'), 
    uiOutput("variable3selected"),
    uiOutput("Score")
)

server <- function(input,output){
    output$variable1selected = renderUI({
        checkboxInput("variable1selected",
                      "Include Variable 1 in Analysis",
                      value=TRUE)
    })
    output$variable2selected = renderUI({
        checkboxInput("variable2selected",
                      "Include Variable 2 in Analysis",
                      value=TRUE)
    })
    output$variable3selected = renderUI({
        checkboxInput("variable3selected",
                      "Include Variable 3 in Analysis",
                      value=TRUE)
    })

    variable1selected = reactive({as.integer(input$variable1selected)})
    variable2selected = reactive({as.integer(input$variable2selected)})
    variable3selected = reactive({as.integer(input$variable3selected)})

    Score = reactive({variable1selected()*10 + variable2selected()*20 + 
        variable3selected()*30})

    output$Score <- renderText(Score())
}



# Run the application 
shinyApp(ui = ui, server = server)
person Big_Ozzy    schedule 21.08.2019
comment
Спасибо, что нашли время, чтобы напечатать это. По причинам, которые может быть очень многословно объяснять, я хочу избежать реактивного Score, потому что checkboxInput используется только в определенных обстоятельствах - в противном случае 1 или 0 предопределены. Я отредактировал свой код, чтобы он больше походил на то, как он выглядел, когда я использовал numericInput вместо checkboxInput (но включил checkboxInput, так как это то, что я использую сейчас). Учитывая, как это выглядит сейчас, видите ли вы очевидные ошибки? Большое спасибо еще раз! - person UNLVStudent1992; 21.08.2019
comment
Вы все равно хотите, чтобы это было Reactive(), вам просто нужно иметь оператор if для заранее определенных обстоятельств. - person Big_Ozzy; 22.08.2019
comment
Спасибо - это было что-то еще, из-за чего все параметры checkboxInput были NA. Тем не менее большое спасибо за помощь! Я очень ценю это. - person UNLVStudent1992; 22.08.2019