Как отправить несколько dySeries на вторичную ось на основе входных данных флажка в году? - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь построить dyGraph с использованием временных рядов lungDeaths, но я хочу, чтобы «mdeaths» и «fdeaths» были на вторичной оси, если хотя бы один из них выбран рядом с «ldeaths».

Вот рабочий пример:

global.R

library(dygraphs)
library(shiny)
library(datasets)
library(stringr)

lungDeaths <- cbind(mdeaths, fdeaths)

ui.R

shinyUI(fluidPage(

titlePanel("Predicted Deaths from Lung Disease (UK)"),

sidebarLayout(
    sidebarPanel(

        id="sidebar", width = 3,
        div(
            checkboxGroupInput(
                inputId = "selection", label = "Variables:",
                choiceNames = list("ldeaths",
                                   strong("mdeaths"),
                                   strong("fdeaths")
                                   ),
                choiceValues = c("ldeaths",
                                 "mdeaths",
                                 "fdeaths"), selected = "ldeaths"),
            uiOutput("rendered"),
            style = "font-size:75%"
        )

    ),
    mainPanel(
        dygraphOutput("dygraph")
    )
)
))

server.R

shinyServer(function(input, output) {

lungDeaths <- cbind(mdeaths, fdeaths, ldeaths)

rData <- reactive({
    rData <- ts(lungDeaths[,input$selection])
})

output$dygraph <- renderDygraph({

    if(length(input$selection) > 1 & length(str_subset(input$selection, 'ldeaths$'))>0){

        if(length(str_subset(input$selection, 'fdeaths$'))>0 & length(str_subset(input$selection, 'mdeaths$'))>0){
            dygraph(rData(), main = "Deaths from Lung Disease (UK)") %>% 
                dySeries("mdeaths", axis = 'y2') %>% 
                dySeries("fdeaths", axis = 'y2')
        }

        else if(length(str_subset(input$selection, 'mdeaths$'))>0){
            dygraph(rData(), main = "Deaths from Lung Disease (UK)") %>% 
            dySeries("mdeaths", axis = 'y2') 
        }
        else if(length(str_subset(input$selection, 'fdeaths$'))>0){
            dygraph(rData(), main = "Deaths from Lung Disease (UK)") %>% 
            dySeries("fdeaths", axis = 'y2')

        }
    }
    else
        dygraph(rData(), main = "Deaths from Lung Disease (UK)")
})
})

Этот код выполняет то, что я намереваюсь сделать, но я хотел избежать использования очень многих if и else, потому что проект, с которым я на самом деле работаю, имеет 6пункты, которые должны идти к y2 при выборе. Есть ли способ сделать это без указания каждой возможности?

Я уже исследовал , как добавить dySeries на основе ввода и как сделать условную оценку при использованиитрубы , но ответы, которые я нашел до сих пор, не работают для меня. Обычно я получаю сообщение об ошибке: «

$ Оператор недопустим для атомных векторов

...