2017-03-01 83 views
0

不确定以前是否询问过此问题。我对使用RShiny应用程序非常新,并且我想使用特定CSV文件的特定列中的值作为selectInput()选择框中的选项。这是我的代码没有CSV,使用一些虚拟变量。创建R-shiny应用程序,想要使用CSV文件中的人员名称作为selectInput中的选项

ui <- shinyUI(fluidPage(
    titlePanel(title = h4("PLAYER SELF-CENTERED RATING (PSCR)", align = "center")), 
    sidebarLayout(
    sidebarPanel(
     selectInput("selectplayer", 
        label = h3("Select box"), 
        choices = list("Choice 1" = 3, 
           "Choice 2" = 4, 
           "Choice 3" = 5), 
        selected = 3) 
    ), 

    mainPanel(
     plotOutput('radarPlot', width = "100%") 
    ) 
) 
)) 

很坦率地说,我相当失落w.r.t从哪里开始。我还需要使用CSV文件中的数据来创建另一个数据帧,这个数据帧在shinyServer的renderPlot()中绘制,因此需要找到一种方法将CSV数据导入到服务器和UI中。这是一个简单的任务,还是一件困难的事情?任何帮助感激!

+0

看'read.csv'获得从您的CSV一个data.frame。然后在selectInput中,将选择更改为数据框的该列。 – Jean

+2

你应该只是读取你的CSV数据以外的用户界面和服务器,然后它将可用于他们两个 –

回答

3

您可以在ui中显示uiOutput并动态生成server中的UI。下面的代码应该给你一个提示。

library(shiny) 

server <- function(input, session, output) { 

# read csv here  
datin <- read.table(text = 'Name,Age,Weight 
John,10,40 
Hary,20,70 
Mike,30,80', 
header = TRUE, sep =",", stringsAsFactors = FALSE) 

    output$select_1 = renderUI({ 

      selectInput("select_input","select", choices = datin['Name']) 

    }) 
} 

ui <- fluidPage(
    uiOutput("select_1") 
) 

shinyApp(ui = ui, server = server) 
+1

精彩,非常感谢你 – Canovice

+0

该解决方案的一个限制是,如果源(在这种情况下是一个CSV文件,但它可能是数据库查询)更改,当您从浏览器刷新应用程序或在另一个选项卡中打开应用程序时,不会反映这一点。您需要关闭应用程序并重新开始。当用户使用报表运行闪亮的服务器时,这很烦人,因为这意味着您必须重新启动服务器,这并不理想。 –

0

你就可以使用uiOutput动态输出在侧边栏,如下面的代码所示:

library(shiny) 
    library(shinydashboard) 
    ui <- dashboardPage(
     dashboardHeader(title = "R-shiny app"), 
     dashboardSidebar(
     uiOutput("columnNames") # Dynamic generate UI element 
    ), 
     dashboardBody(
     fluidRow(
      column(10, 
       dataTableOutput('dataview')) #Display data in the tabular form 
     ), 

     fluidRow(column(3, verbatimTextOutput("column_value"))), 
     hr() 
    ) 
    ) 

    server <- function(input, output) { 
     # Read data from .csv file 
     data=iris # (for understanding I am using iris dataset) 
     output$column_value <- renderPrint({ 
      output$columnNames <- renderUI({ 
      selectInput("datacolumn", h4("Select Data Column"), colnames(data)) # Dynamically set selectInput 
      }) 
      output$dataview <- renderDataTable(data,options = list(pageLength = 10)) # Display the iris dataset 
     }) 
    } 

    shinyApp(ui, server) 
+0

@ Canovice-通过上面的代码,并希望你会得到一个想法。我已经测试了上面的代码和它的工作。 –

相关问题