renderPlot()中针对有光泽的应用(基本)的if / ifelse语句

时间:2018-11-18 09:20:52

标签: r shiny

我缺少Rif语句的一些基础知识,尤其是如何在Shiny应用程序的服务器块中使用它们。我只是想为四个图表中的每一个都有一个单选按钮,但是我认为我的if语句结构失败了。只有最后一个单选按钮显示图。我对ifelse()较为熟悉,但是正在使用另一个的Shiny模板-我可以在这里使用ifelse()吗?另外,对于如何将输入数据(data.frame创建和绘图定义)添加到服务器块中的任何帮助,也将不胜感激-我在那里也缺少一些东西。

library(shiny)
library(ggplot2)

x <- seq(1:100)
y <- rnorm(100)
df <- data.frame(x,y)

p1 <- ggplot(df, aes(x,y)) + geom_line()
p2 <- ggplot(df, aes(x,y)) + geom_point()
p3 <- ggplot(df, aes(x,y)) + geom_bar(stat = "identity")
p4 <- ggplot(df, aes(x,y)) + geom_smooth()

ui <- fluidPage(theme=shinytheme("sandstone"),
            fluidRow(
              column(width=8,
              radioButtons("radioInput", "Radio Button Header", choices =
                  c("name of plot 1 for user" = "plot 1",
                    "name of plot 2 for user" = "plot 2",
                    "name of plot 3 for user" = "plot 3",
                    "name of plot 4 for user" = "plot 4"
                    ))
                    )
            ),             
            plotOutput("distPlot", height="700px")
)

server <- function(input, output) {

output$distPlot <- renderPlot({

    if (input$radioInput == "plot 1")  {p1}   
    if (input$radioInput == "plot 2")  {p2}  
    if (input$radioInput == "plot 3")  {p3}  
    if (input$radioInput == "plot 4")  {p4}

  })
}  

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:0)

您有两个选择,或者在绘制时放置function matchType (value, type) { if (value === type) return value; return type.includes(value) ? value : null; } console.log(matchType("foo", "foo")); console.log(matchType("foo", ["foo", "bar"])); console.log(matchType("foo", ["blah", "bar"]));命令:

print

或者您要使用server <- function(input, output) { output$distPlot <- renderPlot({ if (input$radioInput == "plot 1") {print(p1)} if (input$radioInput == "plot 2") {print(p2)} if (input$radioInput == "plot 3") {print(p3)} if (input$radioInput == "plot 4") {print(p4)} }) } 条语句:

if/else