shiny app not opening my excel file?

,

My shiny app gives this warning

" Warning in file(file, "rt") :
2024-11-07T10:47:19.718802+00:00 shinyapps[13262355]:   cannot open file 'Cancer_Data.csv': No such file or directory
2024-11-07T10:47:19.722822+00:00 shinyapps[13262355]: Warning: Error in file: cannot open the connection
2024-11-07T10:47:19.727138+00:00 shinyapps[13262355]:   203: file"

my file has xlsx file and it normally opens. This problem never resolve . Why?

Does this happen when running the app locally (say in RStudio) or only when running it on a server? Can you post a minimal example (a reprex) that encounters the problem?

This is my code.:

# Load required libraries
library(shiny)
library(shinydashboard)
library(ggplot2)
library(caret)
library(glmnet)
library(pROC)
library(conflicted)
library(readxl)
library(rsconnect)

# Set preference for shinydashboard::box to avoid conflict
conflicts_prefer(shinydashboard::box)


Cancer_Data <- read_excel("C:/Users/NITRO 5/OneDrive/Documents/Cancer _predict/Cancer_Data.xlsx")


# UI layout
ui <- dashboardPage(
  dashboardHeader(title = "Cancer Diagnosis Prediction"),
  dashboardSidebar(
    sidebarMenu(
      menuItem("Model Performance", tabName = "performance", icon = icon("chart-line")),
      menuItem("Prediction", tabName = "prediction", icon = icon("diagnoses"))
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(
        tabName = "performance",
        fluidRow(
          shinydashboard::box(plotOutput("rocPlot"), title = "ROC Curve"),
          shinydashboard::box(tableOutput("metricsTable"), title = "Model Metrics")
        )
      ),
      tabItem(
        tabName = "prediction",
        fluidRow(
          shinydashboard::box(
            title = "Enter Predictor Values",
            # Add inputs for each predictor variable
            uiOutput("inputFields"),
            actionButton("predictBtn", "Predict Diagnosis")
          ),
          shinydashboard::box(
            title = "Prediction Result",
            textOutput("predictionResult")
          )
        )
      )
    )
  )
)

# Server logic
server <- function(input, output, session) {
  
  # Preprocess data
  train_data <- reactive({
    req(Cancer_Data) # Ensure Cancer_Data is loaded
    set.seed(125)
    trainIndex <- createDataPartition(Cancer_Data$diagnosis, p = 0.75, list = FALSE)
    train_data <- Cancer_Data[trainIndex, ]
    train_data <- na.omit(train_data)
    train_data$diagnosis <- as.factor(train_data$diagnosis)
    return(train_data)
  })
  
  # Train models
  fit_glm <- reactive({
    req(train_data()) # Ensure train_data is available
    train(diagnosis ~ ., data = train_data(), method = "glm", 
          metric = "ROC", preProc = c("center", "scale"),
          trControl = trainControl(method = "cv", classProbs = TRUE, summaryFunction = twoClassSummary))
  })
  
  fit_glmnet <- reactive({
    req(train_data()) # Ensure train_data is available
    train(diagnosis ~ ., data = train_data(), method = "glmnet", 
          metric = "ROC", preProc = c("center", "scale"),
          trControl = trainControl(method = "cv", classProbs = TRUE, summaryFunction = twoClassSummary))
  })
  
  # Plot ROC Curve
  output$rocPlot <- renderPlot({
    req(fit_glm(), fit_glmnet()) # Ensure models are trained
    glm_roc <- roc(response = train_data()$diagnosis, predictor = predict(fit_glm(), train_data(), type = "prob")[,2])
    glmnet_roc <- roc(response = train_data()$diagnosis, predictor = predict(fit_glmnet(), train_data(), type = "prob")[,2])
    plot(glm_roc, col = "blue", main = "ROC Curves for Models")
    lines(glmnet_roc, col = "red")
    legend("bottomright", legend = c("GLM", "GLMNET"), col = c("blue", "red"), lty = 1)
  })
  
  # Display Sensitivity and Specificity
  output$metricsTable <- renderTable({
    req(fit_glm(), fit_glmnet()) # Ensure models are trained
    glm_conf <- confusionMatrix(predict(fit_glm(), train_data()), train_data()$diagnosis)
    glmnet_conf <- confusionMatrix(predict(fit_glmnet(), train_data()), train_data()$diagnosis)
    
    data.frame(
      Model = c("GLM", "GLMNET"),
      Sensitivity = c(glm_conf$byClass["Sensitivity"], glmnet_conf$byClass["Sensitivity"]),
      Specificity = c(glm_conf$byClass["Specificity"], glmnet_conf$byClass["Specificity"])
    )
  })
  
  # Generate input fields for predictors in Tab 2
  output$inputFields <- renderUI({
    req(train_data()) # Ensure train_data is available
    input_list <- lapply(names(train_data())[-which(names(train_data()) == "diagnosis")], function(var) {
      numericInput(inputId = var, label = var, value = 0)
    })
    do.call(tagList, input_list)
  })
  
  # Prediction based on user input
  output$predictionResult <- renderText({
    req(input$predictBtn)
    req(fit_glmnet()) # Ensure model is trained
    
    # Gather input data for prediction
    input_data <- as.data.frame(t(sapply(names(train_data())[-which(names(train_data()) == "diagnosis")], 
                                         function(var) input[[var]])))
    colnames(input_data) <- names(train_data())[-which(names(train_data()) == "diagnosis")]
    
    # Predict diagnosis
    prediction <- predict(fit_glmnet(), input_data)
    paste("Predicted Diagnosis:", prediction)
  })
}

# Run the app
shinyApp(ui, server)

Example data:

cancer_data <- data.frame(
  diagnosis = c("M", "M", "M", "B", "B"),
  radius_mean = c(17.99, 20.57, 19.69, 11.42, 13.85),
  texture_mean = c(10.38, 17.77, 21.25, 20.38, 16.54),
  perimeter_mean = c(122.8, 132.9, 130.0, 77.58, 86.49),
  area_mean = c(1001, 1326, 1203, 386.1, 403.5),
  smoothness_mean = c(0.1184, 0.08474, 0.1096, 0.1425, 0.1003),
  compactness_mean = c(0.2776, 0.07864, 0.1599, 0.2839, 0.1328)
)

Dont use absolute path to the excel. If the excel is in your project/work directory, then you can refer to it relatively, just with the file name alone.

When you app is deployed on a foreign server it wont have your c:/Users pathz but it will have put project materials somewhere, and thats all you need.

1 Like

setwd("C:\Users\NITRO 5\OneDrive\Documents\Cancer _predict")
runApp('~')
[conflicted] Removing existing preference.
[conflicted] Will prefer shinydashboard::box over any other package.
Error: path does not exist: ‘Cancer_Data.xlsx’

Where is your app.R file?

I have put the app.R's code here:

# Load required libraries
library(shiny)
library(shinydashboard)
library(ggplot2)
library(caret)
library(glmnet)
library(pROC)
library(conflicted)
library(readxl)
library(rsconnect)

# Set preference for shinydashboard::box to avoid conflict
conflicts_prefer(shinydashboard::box)


Cancer_Data <- read_excel("Cancer_Data.xlsx")


# UI layout
ui <- dashboardPage(
  dashboardHeader(title = "Cancer Diagnosis Prediction"),
  dashboardSidebar(
    sidebarMenu(
      menuItem("Model Performance", tabName = "performance", icon = icon("chart-line")),
      menuItem("Prediction", tabName = "prediction", icon = icon("diagnoses"))
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(
        tabName = "performance",
        fluidRow(
          shinydashboard::box(plotOutput("rocPlot"), title = "ROC Curve"),
          shinydashboard::box(tableOutput("metricsTable"), title = "Model Metrics")
        )
      ),
      tabItem(
        tabName = "prediction",
        fluidRow(
          shinydashboard::box(
            title = "Enter Predictor Values",
            # Add inputs for each predictor variable
            uiOutput("inputFields"),
            actionButton("predictBtn", "Predict Diagnosis")
          ),
          shinydashboard::box(
            title = "Prediction Result",
            textOutput("predictionResult")
          )
        )
      )
    )
  )
)

# Server logic
server <- function(input, output, session) {
  
  # Preprocess data
  train_data <- reactive({
    req(Cancer_Data) # Ensure Cancer_Data is loaded
    set.seed(125)
    trainIndex <- createDataPartition(Cancer_Data$diagnosis, p = 0.75, list = FALSE)
    train_data <- Cancer_Data[trainIndex, ]
    train_data <- na.omit(train_data)
    train_data$diagnosis <- as.factor(train_data$diagnosis)
    return(train_data)
  })
  
  # Train models
  fit_glm <- reactive({
    req(train_data()) # Ensure train_data is available
    train(diagnosis ~ ., data = train_data(), method = "glm", 
          metric = "ROC", preProc = c("center", "scale"),
          trControl = trainControl(method = "cv", classProbs = TRUE, summaryFunction = twoClassSummary))
  })
  
  fit_glmnet <- reactive({
    req(train_data()) # Ensure train_data is available
    train(diagnosis ~ ., data = train_data(), method = "glmnet", 
          metric = "ROC", preProc = c("center", "scale"),
          trControl = trainControl(method = "cv", classProbs = TRUE, summaryFunction = twoClassSummary))
  })
  
  # Plot ROC Curve
  output$rocPlot <- renderPlot({
    req(fit_glm(), fit_glmnet()) # Ensure models are trained
    glm_roc <- roc(response = train_data()$diagnosis, predictor = predict(fit_glm(), train_data(), type = "prob")[,2])
    glmnet_roc <- roc(response = train_data()$diagnosis, predictor = predict(fit_glmnet(), train_data(), type = "prob")[,2])
    plot(glm_roc, col = "blue", main = "ROC Curves for Models")
    lines(glmnet_roc, col = "red")
    legend("bottomright", legend = c("GLM", "GLMNET"), col = c("blue", "red"), lty = 1)
  })
  
  # Display Sensitivity and Specificity
  output$metricsTable <- renderTable({
    req(fit_glm(), fit_glmnet()) # Ensure models are trained
    glm_conf <- confusionMatrix(predict(fit_glm(), train_data()), train_data()$diagnosis)
    glmnet_conf <- confusionMatrix(predict(fit_glmnet(), train_data()), train_data()$diagnosis)
    
    data.frame(
      Model = c("GLM", "GLMNET"),
      Sensitivity = c(glm_conf$byClass["Sensitivity"], glmnet_conf$byClass["Sensitivity"]),
      Specificity = c(glm_conf$byClass["Specificity"], glmnet_conf$byClass["Specificity"])
    )
  })
  
  # Generate input fields for predictors in Tab 2
  output$inputFields <- renderUI({
    req(train_data()) # Ensure train_data is available
    input_list <- lapply(names(train_data())[-which(names(train_data()) == "diagnosis")], function(var) {
      numericInput(inputId = var, label = var, value = 0)
    })
    do.call(tagList, input_list)
  })
  
  # Prediction based on user input
  output$predictionResult <- renderText({
    req(input$predictBtn)
    req(fit_glmnet()) # Ensure model is trained
    
    # Gather input data for prediction
    input_data <- as.data.frame(t(sapply(names(train_data())[-which(names(train_data()) == "diagnosis")], 
                                         function(var) input[[var]])))
    colnames(input_data) <- names(train_data())[-which(names(train_data()) == "diagnosis")]
    
    # Predict diagnosis
    prediction <- predict(fit_glmnet(), input_data)
    paste("Predicted Diagnosis:", prediction)
  })
}

# Run the app
shinyApp(ui, server)

The important part is where is it ? The path of it

in the same place with the excel

both of the excel file and the app is in the working directory within same folder

I dont understand this :

> runApp('~')

because on windows that tilde shouldnt really mean anything

Error in `shinyAppDir()`:
! App dir must contain either app.R or server.R.

but somehow you were able to run the app.R and for the R session processing that app.R to not have access to other files in that same folder.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.