我正在尝试使用lungDeaths时间序列绘制dyGraph,但如果要在“ ldeaths”旁边选择“ mdeaths”和“ fdeaths”中的至少一个,则希望将它们显示在辅助轴上。
这是一个可行的示例:
global.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")
)
)
))
ui.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,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)")
})
})
server.R
template <typename T>
class Block_Grid
{
public:
Block_Grid(std::size_t n,std::size_t m,std::size_t b)
: _n(n),_m(m),_b(b),_elements(n * m)
{
assert(n % b == 0);
assert(m % b == 0);
}
T & operator()(std::size_t i,std::size_t j)
{
return _elements[index(i,j)];
}
protected:
private:
std::size_t index(int i,int j) const
{
return (i % b)
+ (j % b) * b
+ (i / b) * b * b
+ (j / b) * n * b;
}
std::size_t _n;
std::size_t _m;
std::size_t _b;
std::vector<T> _elements;
};
此代码可以实现我想要的功能,但是我想避免使用那么多的if和else,因为我实际上正在使用的项目有6个项目,在选择时应转到y2。有什么方法可以不必指定每种可能性吗?
我已经对how to add dySeries based on input和如何进行conditional evaluation when using pipes进行了研究,但是到目前为止我发现的答案对我不起作用。我通常会收到一条错误消息:
$运算符对于原子向量无效