Я работаю над приложением Shiny, которое получает входные данные (csv) от пользователя и отображает различные представления корреляции в наборе данных.Моя точечная диаграмма отображается, когда пользователь загружает файл, но сначала высвечивает сообщение об ошибке Error: no expression to parse
.Кажется, что моя функция ggplot
вызывается до того, как данные, возвращаемые функцией reactive()
, завершат загрузку, поэтому ввод не определен.Это потому, что он выполняется асинхронно?
Я попытался добавить условные выражения, чтобы проверить, является ли реактивная функция getData()
нулевой, перед выполнением графика, но ошибка все еще мигает перед успешным отображением графика.
ui.R
library(shiny)
fluidPage(
titlePanel("Correlation Analyzer"),
sidebarLayout(
sidebarPanel(
fileInput("file", "Choose Clean CSV File to Analyze (must include headers)",
accept = c("text/csv","text/comma-separated-values,text/plain",".csv")
),
uiOutput("xvars"), # dropdowns for selecting variable names
uiOutput("yvars"),
checkboxGroupInput(inputId='corrType', label="Correlation Type",
choices=c('Continuous - Continuous (Pearson)', "Categorical - Categorical (Kramer's V)",
'Continuous - Categorical (Correlation Ratio)'),
selected = NULL, inline = FALSE, width = NULL)
),
mainPanel(
if (is.null(tableOutput("dataHead")) == FALSE) {
plotOutput("scatter")
}
)
)
)
server.R
library(shiny)
library(ggplot2)
function(input, output) {
getData = reactive({
inFile = input$file
if (is.null(inFile)) {
return(NULL)
}
df = read.csv(inFile$datapath, header = TRUE)
return(df)
})
output$dataHead = renderTable({
return(head(getData()))
})
output$xvars =
renderUI({ # send list of available variable name choices to UI
selectInput(inputId='selected_xvar', label="Select X Variable", choices=colnames(getData()), selected=input$selected_xvar)
})
output$yvars =
renderUI({
selectInput(inputId='selected_yvar', label="Select Y Variable", choices=colnames(getData()), selected=input$selected_yvar)
})
output$scatter = renderPlot({
selected_xvar = input$selected_xvar
selected_yvar = input$selected_yvar
df = getData()
if (is.null(df)==FALSE) {
ggplot(df, aes_string(x=selected_xvar, y=selected_yvar)) +
geom_point(shape=1, col="blue") +
geom_smooth(method=lm) + ggtitle("Scatterplot") + xlab(selected_xvar) + ylab(selected_yvar) +
theme(plot.title = element_text(size=18, hjust=0.5))
# plot(unlist(df[selected_xvar]), unlist(df[selected_yvar]), main="Scatterplot",
# xlab=selected_xvar, ylab=selected_yvar, pch=19)
}
})
}
Я также пытался использовать функцию base plot()
, и до этого получал сообщение об ошибке Error: undefined columns selected
сюжет рендерит.