如何使用 csv 文件的列名作为输入选择?
How can I use the column names of a csv file as input selection?
我创建了一个 Shiny App,它接受 Excel 和 csv 文件作为输入。此外,它应该预测可以在上传的文件中找到的指标。为了能够在文件中定义正确的列,用户应该能够 select 应该预测的列。这就是为什么我想要一个 select 输入区域,其中显示文件的所有列名。但我没有找到正确的解决方案。
到目前为止,在以下我的应用程序中:
ui:
ui <- fluidPage(
#definition which file input is allowed
fileInput(
'file',
label = h4("Welche Datei soll hochgeladen werden?"),
multiple= FALSE,
accept = c(
'text/csv',
'text/comma-separated-values,text/plain',
'.csv',
'.xlsx'
)
),
服务器:
server <- function(input, output) {
#read data
data <- reactive({
validate(need(input$file, ""))
infile <- input$file
if (input$type == "1") {
read.csv(infile$datapath,
header = input$header,
sep = input$sep,
stringsAsFactors = FALSE)
} else {
read_xlsx(infile$datapath)
}
})
我在服务器上也想过类似这样的事情,但最终无法解决问题:
names <- reactive({
df <- data()
if (is.null(df)) return(NULL)
items=names(df)
names(items)=items
return(names(items))
})
感谢您的帮助!
在 UI 中,您应该添加:
selectInput("columnid","Column to forecast",choices=c())
你的服务器应该像这样启动:
server <- function(session,input, output) {
在服务器内部,在你的反应中的 else
之后你可以添加:
updateSelectInput(session,"columnid",choices=colnames(mydata))
记得调用"mydata"读取的数据,然后return
调用它,像这样:
data <- reactive({
validate(need(input$file, ""))
infile <- input$file
if (input$type == "1") {
mydata=read.csv(infile$datapath,
header = input$header,
sep = input$sep,
stringsAsFactors = FALSE)
} else {
mydata=read_xlsx(infile$datapath)
}
updateSelectInput(session,"columnid",choices=colnames(mydata))
return(mydata)
})
您也可以在服务器中使用observe
。 observe
没有 return 任何东西。与 reactive
不同,它会立即响应(而不是延迟响应)。它最适合用于 ip/op 操作。
ui <- fluidPage (
selectInput("select_input_id", "INPUT COLUMNS", choices = c())
)
server <- function(input, output) {
#read data
data <- reactive({
infile <- input$file
if (input$type == "1") {
df <- read.csv(infile$datapath,
header = input$header,
sep = input$sep,
stringsAsFactors = FALSE)
return (df)
}
})
observe({
updateSelectInput(
session,
"select_input_id",
choices = names(data())
)
)}
}
我创建了一个 Shiny App,它接受 Excel 和 csv 文件作为输入。此外,它应该预测可以在上传的文件中找到的指标。为了能够在文件中定义正确的列,用户应该能够 select 应该预测的列。这就是为什么我想要一个 select 输入区域,其中显示文件的所有列名。但我没有找到正确的解决方案。
到目前为止,在以下我的应用程序中:
ui:
ui <- fluidPage(
#definition which file input is allowed
fileInput(
'file',
label = h4("Welche Datei soll hochgeladen werden?"),
multiple= FALSE,
accept = c(
'text/csv',
'text/comma-separated-values,text/plain',
'.csv',
'.xlsx'
)
),
服务器:
server <- function(input, output) {
#read data
data <- reactive({
validate(need(input$file, ""))
infile <- input$file
if (input$type == "1") {
read.csv(infile$datapath,
header = input$header,
sep = input$sep,
stringsAsFactors = FALSE)
} else {
read_xlsx(infile$datapath)
}
})
我在服务器上也想过类似这样的事情,但最终无法解决问题:
names <- reactive({
df <- data()
if (is.null(df)) return(NULL)
items=names(df)
names(items)=items
return(names(items))
})
感谢您的帮助!
在 UI 中,您应该添加:
selectInput("columnid","Column to forecast",choices=c())
你的服务器应该像这样启动:
server <- function(session,input, output) {
在服务器内部,在你的反应中的 else
之后你可以添加:
updateSelectInput(session,"columnid",choices=colnames(mydata))
记得调用"mydata"读取的数据,然后return
调用它,像这样:
data <- reactive({
validate(need(input$file, ""))
infile <- input$file
if (input$type == "1") {
mydata=read.csv(infile$datapath,
header = input$header,
sep = input$sep,
stringsAsFactors = FALSE)
} else {
mydata=read_xlsx(infile$datapath)
}
updateSelectInput(session,"columnid",choices=colnames(mydata))
return(mydata)
})
您也可以在服务器中使用observe
。 observe
没有 return 任何东西。与 reactive
不同,它会立即响应(而不是延迟响应)。它最适合用于 ip/op 操作。
ui <- fluidPage (
selectInput("select_input_id", "INPUT COLUMNS", choices = c())
)
server <- function(input, output) {
#read data
data <- reactive({
infile <- input$file
if (input$type == "1") {
df <- read.csv(infile$datapath,
header = input$header,
sep = input$sep,
stringsAsFactors = FALSE)
return (df)
}
})
observe({
updateSelectInput(
session,
"select_input_id",
choices = names(data())
)
)}
}