如何在mainPanel中放置几个​​renderText?

时间:2016-10-01 01:40:16

标签: r shiny

我是R和Shiny的初学者,我有一点问题。

如果你能帮忙,我真的很感激。

例如,我已将变量Group添加到R数据框" mtcars"以字符格式。现在我有3组汽车:1,2和3,取决于" mpg"每辆车的水平。

我想要一个renderText显示我检查过的组的车数,第二个用于显示已检查组的4个车辆的数量,第三个用于显示已检查组的4个车辆数量6辆车,第四辆显示6辆车的数量。

如果我只保留Group textRender,它的效果很好,但是当我添加其他3个时,会出现错误而我找不到原因。

这是代码:

ui.R

library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Example"),
sidebarPanel(checkboxGroupInput("dynamic", "Groups", label = "Groups",
           choices = c("Group 1"="1","Group 2"="2","Group 3" = "3"))),

mainPanel(("Group : "), textOutput("textDisplay"),
        ("4 cylinders : "), textOutput("text4cyl"),
        ("6 cylinders : "), textOutput("text6cyl"),
        ("8 cylinders : "), textOutput("text8cyl"))))

server.R

library(shiny)
shinyServer(function(input, output) {
  output$textDisplay <- renderText({
    a<-sum(mtcars$Group %in% input$dynamic)
  output$text4cyl <- renderText({
    b<-sum(mtcars$Group %in% input$dynamic) & mtcars$cyl ==4
  output$text6cyl <- renderText({
    c<-sum(mtcars$Group %in% input$dynamic) & mtcars$cyl ==6
  output$text8cyl <- renderText({
    d<-sum(mtcars$Group %in% input$dynamic) & mtcars$cyl ==8})})})})})

非常感谢您的帮助,对不起我的英语。

1 个答案:

答案 0 :(得分:0)

我刚刚创建了可能与您不同的分组。这是一种可能的解决方案:

ui.R

    library(shiny)
    shinyUI(pageWithSidebar(
            headerPanel("Example"),
            sidebarPanel(checkboxGroupInput("dynamic", label = "Groups",
                                            choices = list("Group 1"= "1","Group 2" = "2","Group 3" = "3"),
                                            selected = c(1,2,3))),

            mainPanel(("Group : "), textOutput("textDisplay"),
                      ("4 cylinders : "), textOutput("text4cyl"),
                      ("6 cylinders : "), textOutput("text6cyl"),
                      ("8 cylinders : "), textOutput("text8cyl"))))

server.R

    library(shiny)
    library(dplyr)

    group <- c(rep("1", 11), rep("2", 11), rep("3", 10))
    group
    mtcars$Group<-factor(group)

    shinyServer(function(input, output) {
            selection <- reactive({
                    filter(mtcars, Group %in% input$dynamic)
            })
            output$textDisplay <- renderText({
                    NROW(selection())
            })
            output$text4cyl <- renderText({
                    tmp <- selection()
                    NROW(filter(tmp, cyl == 4))
            })
            output$text6cyl <- renderText({
                    tmp <- selection()
                    NROW(filter(tmp, cyl == 6))
            })
            output$text8cyl <- renderText({
                    tmp <- selection()
                    NROW(filter(tmp, cyl == 8))
            })
            })