Создать поле значений в renderUI с помощью Looping - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу создать поле значения в соответствии с имеющимися у меня данными. Предположим, если у меня есть 5 переменных данных consumerdata, как это,

    id     data    number1   number2
1   k4j       A         67        53
2   rls       B         30        62
3   yv9       C         45        28
4   l6h       D         63        47
5   f08       E         96        75

тогда мне нужно создать 5 полей значения со столбцами 'name' и 'number1'. Я получаю Нет данных и ошибок нет.

Код

ui <-  dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    sidebarMenu(
      menuItem("Consumer", tabName = "consumerdata")
    )
  ),  

  dashboardBody(
    tabItems(
      tabItem(tabName = "consumerdata",
              fluidRow(
                tabBox(width = 12,
                       tabPanel("Label",
                                box(width = 12,
                                    uiOutput("consumer")
                                )
                             )
                          ) 
                       )
                    )
                  )
                )
             )

server <- function(input,output) {

    output$consumer <- renderUI({


  lapply(consumerdata$name, function(i) { 

    valueBox(i,
             consumerdata$number1,     #here display number1 one by one like name 
             width = 4
             )
      }) 

    })
}

shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 04 сентября 2018

Вы почти достигли цели, теперь вы можете перебирать последовательность чисел вместо самих элементов, а затем использовать эти числа в качестве индекса.

library(shiny)
library(shinydashboard)

ui <-  dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    sidebarMenu(
      menuItem("Consumer", tabName = "consumerdata")
    )
  ),  

  dashboardBody(
    tabItems(
      tabItem(tabName = "consumerdata",
              fluidRow(
                tabBox(width = 12,
                       tabPanel("Label",
                                box(width = 12,
                                    uiOutput("consumer")
                                )
                       )
                ) 
              )
      )
    )
  )
)

server <- function(input,output) {

  output$consumer <- renderUI({

    consumerdata <- head(mtcars) #comment this if you already have consumerdata defined

    consumerdata$name <- rownames(consumerdata) #comment this if you already have consumerdata defined

    consumerdata$number1 <- 1:6 #comment this if you already have consumerdata defined


    lapply(1:length(consumerdata$name), function(i) { 


      valueBox(consumerdata$name[i],
               consumerdata$number1[i],     #here display number1 one by one like name 
               width = 4
      )
    } )

  })
}

shinyApp(ui = ui, server = server)
...