R闪亮渲染UI不起作用

时间:2016-08-09 11:31:05

标签: r shiny

在我的应用程序中,我要求用户输入一个文件(.csv)。此外,还有两个selectInput使用renderUI()从输入文件中填充列名。当用户选择两个不同的列并单击submitButton时,将生成一个图。具有理想输出的UI如下所示。这是有效的,因为我手动输入了绘图中的值,并且不会在下拉选项中选择列。

正确输出

enter image description here

我认为问题是将数据框中的 factor 类型元素转换为可以绘制的 numeric 类型。

错误图片:

enter image description here

server.R

library(shiny)
shinyServer(function(input, output) {

 lastgang <- reactive({
  if(is.null(input$file)){return()} 
  read.table(file=input$file$datapath, header =TRUE, sep=",") 
})

output$X = renderUI({ 
    selectInput("X", "Select field to plot along X axis", names(lastgang()), selected = NULL)
})

output$Y = renderUI({ 
    selectInput("Y", "Select field to plot along Y axis", names(lastgang()), selected = NULL)
})

output$plot <- renderPlot({ 
   if (is.null(input$X) || is.null(input$Y)){return()} 
   x = input$X
   y = input$Y
   plot(as.numeric(lastgang()$x),as.numeric(lastgang()$y))    
  })
})

ui.R

   library(shiny)

shinyUI(fluidPage(

 titlePanel("Source Design"),
 sidebarLayout(
  sidebarPanel(fileInput("file", label = h4("Select *.csv file")),

             uiOutput("X"),
             uiOutput("Y"),
             submitButton("Plot")
),

mainPanel(
  plotOutput('plot')  )
)
))

1 个答案:

答案 0 :(得分:1)

如果xy是字符串,lastgang是数据帧。那么你的错误与使用shiny没有任何关系。 以下内容在R

中无效
> D <- data.frame(Col1=1:5, Col2=11:15)
> a <- 'Col1'
> b <- D$a
> b
NULL

这是因为在$ R期望数据框的列名后。如果$之前的变量是数据框,那么如果列名不存在,则获得NULL。 您需要名为Col1

的列
> D <- data.frame(Col1=1:5, Col2=11:15)
> a <- 'Col1'
> b <- D[, which(names(D) == a)]
> b
[1] 1 2 3 4 5