选择Shiny中的绘图尺寸

时间:2018-02-22 08:22:22

标签: r shiny tidyverse

我在ShinyApp工作,我必须打印出很多类似的情节。我认为让用户通过输入选择所需的y维度是一个优雅的解决方案,因此可以避免拥有大量类似的绘图输出。 我通过以下代码运行了这个:

library(tidyverse)
library(shiny)

set.seed(1)
name <- c("a", "b", "c")
v1 <- sample(1:100, 3)
v2 <- sample(1:100, 3)

df <- data_frame(name, v1, v2) 


ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      uiOutput("selector")
    ),
    mainPanel(
      plotOutput("plot")
    )
  )
)

server <- function(input, output){

  output$selector <- renderUI({

    selectizeInput("select", "select column:", choices = colnames(df), selected = "v1")
  })

  data <- reactive({

     df %>% 
      select(name, y = input$select)

  })

  output$plot <- renderPlot({

    ggplot(data())+
      geom_col(aes(x = name, y = y))+
      geom_hline(yintercept = mean(data()$y, na.rm = TRUE), color = "red", size = 1)

  })

}

shinyApp(ui = ui, server = server)

代码执行,应用程序按需运行,但我仍然收到错误消息:

  

错误:input$select必须解析为整数列位置,   不是空的

我认为这是由于select命令同时针对变量名和索引(通过输入$ select)。

我想知道是否有更干净或更优雅的方式。

1 个答案:

答案 0 :(得分:2)

您可以使用 <?php $sql = "SELECT * FROM users ORDER BY id ASC"; $result = mysqli_query($conn, $sql); echo "<table>"; #add this while ($row = mysqli_fetch_array($result)) { echo "<tr>" . "<td>" . $row["0"] . "</td>" . "<td>" . $row[1] . "</td>" . "<td>" . $row[2] . "</td>" . "<td>" . "<input type='password' value='" . $row[3] . "'readonly='readonly'></td>" . "<td>" . $row[4] . "</td>" . "<td>" . $row[5] . "</td>" . "<td> <a class='btn btn-success' href='edituser.php?id=" . $row[0] . "'>Update</a> </td> </tr>"; } echo "</table>"; ?> ,请参阅该函数here的文档。一个工作示例如下所示。

req()

或者,您可以在UI中创建输入,但根据您的应用程序可能无法实现:

library(ggplot2)
library(dplyr)
library(shiny)

set.seed(1)
name <- c("a", "b", "c")
v1 <- sample(1:100, 3)
v2 <- sample(1:100, 3)

df <- data_frame(name, v1, v2) 


ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      uiOutput("selector")
    ),
    mainPanel(
      plotOutput("plot")
    )
  )
)

server <- function(input, output){

  output$selector <- renderUI({

    selectizeInput("select", "select column:", choices = colnames(df), selected = "v1")
  })

  data <- reactive({

    req(input$select)

    df %>% 
      select(name, y = input$select)

  })

  output$plot <- renderPlot({
    ggplot(data())+
      geom_col(aes(x = name, y = y))+
      geom_hline(yintercept = mean(data()$y, na.rm = TRUE), color = "red", size = 1)

  })

}

shinyApp(ui = ui, server = server)

希望这有帮助!