我有一个闪亮的应用程序,它选择xlsx / csv文件并将其上传到系统,上传后,我希望将我提取的数据表的列名填充到selectInput()
或{{1 }}
以下代码表示用户 上传数据文件的事件
ui.R
selectizeInput()
server.R
library(markdown)
require(XLConnect)
shinyUI(navbarPage(img(class="img-polaroid",
src=paste0("http://www.iconsdb.com/icons/preview/black/stackoverflow-5-xl.png")),
tabPanel("Table",
titlePanel("Select Data"),
sidebarLayout(
sidebarPanel(
selectInput("fileType", "Select File Type:",
c("MS Excel Worksheet (xls,xlsx)" = "xls",
"Text/CSV (.csv)" = "csv"
)
),
fileInput('file1', 'Choose file to upload',
accept = c(
'text/csv',
'text/comma-separated-values',
'text/tab-separated-values',
'text/plain',
'.csv',
'.tsv',
'application/vnd.ms-excel',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'.xlsx',
'.xls'
)
),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',
c(Comma=',',
Semicolon=';',
Tab='\t'),
','),
radioButtons('quote', 'Quote',
c(None='',
'Double Quote'='"',
'Single Quote'="'"),
'"'),
tags$hr()
),
mainPanel(
dataTableOutput('table')
)
)
),
tabPanel("Plot",
sidebarLayout(
sidebarPanel(
radioButtons("plotType", "Plot type",
c("Scatter"="p", "Line"="l")
)
),
mainPanel(
plotOutput("plot")
)
)
),
navbarMenu("More",
tabPanel("Summary",
verbatimTextOutput("summary")
)
)
))
很公道,我现在有一个工作系统的输入,可以从Excel源或文本/ CSV中获取数据。此后,我希望创建一个动态列表,将shinyServer(
function(input, output, session)
{
output$plot <- renderPlot({
plot(data$Count,data$Sales, type=input$plotType)
})
output$summary <- renderPrint({
summary(data)
})
output$table <- renderDataTable({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
if(input$fileType=='csv'){
table1<-read.csv(inFile$datapath, header = input$header,
sep = input$sep, quote = input$quote)
return(table1)
} else if(input$fileType=='xls'){
table1 <- readWorksheetFromFile(inFile$datapath, sheet=1)
}
})
}
)
的值传递给我的ui.R并将其放入指定的位置。
我该怎么做?
我尝试使用来自Mason DeCamillis对How to get vector of options from server.R to ui.R for selectInput in Shiny R App的答案的colnames(output$table)
但是R给我一个“找不到对象”的错误。
此外,我发现我必须使用uiOutput()
能够将数据传递到UI和服务器。但没有任何线索,我该怎么做。
答案 0 :(得分:8)
您可以将上传的表格存储在data
的{{1}}变量中,并使用您发布的链接中的代码填充server.R
。
在selectInput
中,你可以这样做:
server.R
并在data <- reactive({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
if(input$fileType=='csv'){
table1<-read.csv(inFile$datapath, header = input$header,
sep = input$sep, quote = input$quote)
return(table1)
} else if(input$fileType=='xls'){
table1 <- readWorksheetFromFile(inFile$datapath, sheet=1)
}
})
output$table <- renderDataTable({
data()
})
output$selector <- renderUI({
selectInput("var", "Choose name:", as.list(colnames(data())))
})
中,将ui.R
添加到您希望列表所在的位置。