我正在编写一个闪亮的脚本,其中上传文件,下拉列表显示该文件中的列名称,然后出现第二个下拉列表,其中包含第一个下拉列表中所选文件中列的唯一值。我能够创建第一个下拉列表,但是第二个下拉列表遇到了问题。这是我到目前为止的代码:
ui <- fluidPage(
titlePanel("File Upload Test"),
sidebarLayout(
sidebarPanel(
fileInput("file1", "Choose csv file",
multiple = T,
accept = c(".csv")),
uiOutput("y_input"),
uiOutput("target_input")),
mainPanel(
plotOutput("contents"))))
server <- function(input, output, session) {
inFile <- reactive({
if (is.null(input$file1)) {
return(NULL)
} else {
input$file1}
})
myData <- reactive({
if (is.null(inFile())) {
return(NULL)
} else {
read.csv(inFile()$datapath)}
})
output$y_input <- renderUI({
if (is.null(inFile())) {
return(NULL)
} else {
selectInput("y_output", "Select Y Variable", names(myData()))}
})
output$target_input <- renderUI({
if (is.null(input$y_input)) {
return(NULL)
} else {
selectInput("target_output", "Select Target Group",
myData( [,input$y_output])}
})
}
感谢任何帮助!这是我关于堆栈溢出的第一篇文章,所以如果这篇文章中有任何格式或清晰的东西我可以/应该修复请告诉我!谢谢!
答案 0 :(得分:0)
req
req(name_of_input)
是if(is.null(name_of_input)) return NULL
的简写。它会为您节省几笔,同时提供更好的可读性。
inFile
是不必要的使用input $ file1 $ datapath代替。同样,这也更简洁,同时具有更好的性能。
myData <- reactive({
req(input$file1)
read.csv(input$file1$datapath)
})
您对myData
的引用是错误的。 [,input$y_output]
的子集部分应位于括号之外,如下所示:myData()[,input$y_output]
。请记住,即使reactives
看起来像函数,它们也不会带任何参数。
server <- function(input, output, session) {
myData <- reactive({
req(input$file1)
read.csv(input$file1$datapath)
})
output$y_input <- renderUI({
req(input$file1)
selectInput("y_output", "Select Y Variable", names(myData()))
})
output$target_input <- renderUI({
req(input$file1)
selectInput("target_output", "Select Target Group",
myData()[,input$y_output]
)
})
}
ps:欢迎来到stackoverflow! :)