我正在尝试在ui中执行select选项,它应该自动从输入数据中将变量名称添加到列表中。这里我在select选项中使用了 list(ls(input.file1),但是它没有用。
请帮帮我。
ui.R:
library(shiny)
shinyUI(pageWithSidebar(
headerPanel( "Demand Forecast", "Flowserve"),
sidebarPanel(
fileInput('file1', 'Select csv file',
accept=c('text/csv')
),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',
c(Comma=',', Semicolon=';', Tab='\t')
),
tags$hr(),
selectInput("product", "Select Product",
list(ls(input.file1))
)
))
server.R:
library(shiny)
shinyServer(function(input,output){
#Assigning data to a variable "data1"
data1 = reactive({
inFile<-input$file1
if(is.null(inFile))
return(NULL)
read.csv(inFile$datapath, header=input$header, sep=input$sep)
})
sub=reactive({
subset(data1(), select=paste0(input$product))
})
output$contents<-renderTable({
if (is.null(input$file1)) { return() }
sub()
})
})
以下是csv示例:
Product1 Product2 Product3
5 10 17
8 16 26
10 20 32
16 32 50
18 36 56
20 40 62
答案 0 :(得分:4)
如果您在代码中看到ls()
,那几乎总是错误的。然而,棘手的部分是从服务器设置一个ui项:你需要更新----系列函数。
以下是将csv名称填入产品表的部分。您必须添加一些标准代码才能进行填充。
#server.r
library(shiny)
shinyServer(function(input,output,session){
observe({
inFile<-input$file1
print(inFile)
if(is.null(inFile))
return(NULL)
dt = read.csv(inFile$datapath, header=input$header, sep=input$sep)
## Decide later what to do with the data, here we just fill
updateSelectInput(session, "product", choices = names(dt))
})
})
#ui.r
library(shiny)
shinyUI(pageWithSidebar(
headerPanel( "Demand Forecast", "Flowserve"),
sidebarPanel(
fileInput('file1', 'Select csv file',
accept=c('text/csv')
),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',
c(Tab='\t', Comma=',', Semicolon=';' )
),
tags$hr(),
selectInput("product", "Select Product","")
),
mainPanel(tableOutput('contents'))
))