I am learning to make my first shiny app about a simulation. I tried to make a network graph in shiny with pre-written code, but no graph appeared when I run the app. I am not sure what did I miss and would really appreciate it if someone can point it out. Thanks!
here's my code for the ui.R .
library(shiny)
library(shinythemes)
library(shinydashboard)
library(igraph)
# Define UI
ui <- fluidPage(
theme = shinytheme("flatly"),
navbarPage(
"Can't I just go to one party?",
tabPanel(
"Network Graph",
sidebarPanel(
sliderInput(
"n.people",
"Number of people who lived near campus:",
min = 1,
max = 1000,
value = 500
),
sliderInput(
"n.workers",
"Number of people have in-person jobs:",
min = 1,
max = 10,
value = 5
),
sliderInput(
"n.roommates",
"Number of rommates to live with:",
min = 1,
max = 10,
value = 5
),
plotOutput("hist")
),
# sidebarPanel
mainPanel(
h1("Network Simulation"),
h4("How connected are we?"),
verbatimTextOutput("txtout"),
) # mainPanel
)
) # navbarPage) # fluidPage
)
and here's my code for the server.R
# Define server function
server <- function(input, output) {
output$hist <- renderPlot({
distribution <- matrix(0, input$n.people, input$n.people)
### Set up the coworker connections
# 50% of people randomly selected to be workers
workers <- sample(
1:input$n.people,
size = 0.5 * input$n.people,
replace = FALSE
)
# For each worker, randomly select 2 coworkers.
for (w in workers) {
while (sum(distribution[w,]) < input$n.workers + 1) {
availableWorkers <-
workers[rowSums(distribution[workers,]) < input$n.workers]
if (length(availableWorkers[which(availableWorkers != w)]) > input$n.workers -
1) {
c <- sample(availableWorkers[which(availableWorkers != w)],
size = 1,
replace = FALSE)
}
if (length(availableWorkers[which(availableWorkers != w)]) == input$n.workers -
1) {
c <- availableWorkers[which(availableWorkers != w)]
}
if (length(availableWorkers[which(availableWorkers != w)]) == 0) {
break
}
distribution[w, c] <- 1
distribution[c, w] <- 1
}
}
#Set up the roommate connection
# Everyone has exactly 1 roommate
# Person 1 is roommates with person i+1
for (i in 1:(input$n.people - input$n.roommates)) {
for (j in 1:input$n.roommates) {
distribution[i, i + j] <- 1
distribution[i + j, i] <- 1
}
}
### Everone either has 3 edges or 1 edge
### Workers have 3, nonworkers have 1
distribution_graph <-
graph_from_adjacency_matrix(distribution, "undirected")
plot(distribution_graph)
})
}
and my code for the shiny app itself
#loading the necessary libraries and packages
library(shiny)
library(plotly)
library(dplyr)
library(ggplot2)
source("ui.R")
source("server.R")
# Calling the other files
shinyApp(ui = ui, server = server)