在我的应用程序中,我要求用户输入一个文件(.csv)。此外,还有两个selectInput使用renderUI()从输入文件中填充列名。当用户选择两个不同的列并单击submitButton时,将生成一个图。具有理想输出的UI如下所示。这是有效的,因为我手动输入了绘图中的值,并且不会在下拉选项中选择列。
正确输出
我认为问题是将数据框中的 factor 类型元素转换为可以绘制的 numeric 类型。
错误图片:
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') )
)
))
答案 0 :(得分:1)
如果x
和y
是字符串,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