Hello
I would like to publish an R code (see below) in Shinyapp.io in which my own name and the names of other people are entered. A social network map is to be created with several entries. This should change automatically with each new entry.
Unfortunately, I get an error with the working directory in this R script.
Can anyone help me?
Error in setwd("C:/Users/floor/OneDrive - Hochschule Luzern/Forschung und Professionalisierung/Disseminationen/Tagungen-Kolloquium-Notizen-Orga/2024_2_Fachtagung Hochschullernwerkstätten/NetworkDatabase") : 2023-12-17T13:43:26.644422+00:00 shinyapps[10814475]: cannot change working directory 2023-12-17T13:43:26.648475+00:00 shinyapps[10814475]: Calls: local ... tryCatch ->
Working Directory definieren
getwd()
setwd("C:/Users/floor/OneDrive - Hochschule Luzern/Forschung und Professionalisierung/Disseminationen/Tagungen-Kolloquium-Notizen-Orga/2024_2_Fachtagung Hochschullernwerkstätten/NetworkDatabase")
Packages installieren:
install.packages(c("shiny", "igraph", "DBI", "RSQLite", "ggraph", "ggplot2", "ggrepel"), dependencies = TRUE)
install.packages("rsconnect")
Packages laden
library(shiny)
library(igraph)
library(DBI)
library(RSQLite)
library(ggraph)
library(ggplot2)
library(ggrepel)
library(rsconnect)
###############################
Ohne Aktualisierung
###############################
Verbindung zur SQLite-Datenbank herstellen
con <- dbConnect(RSQLite::SQLite(), "network_database.db")
Erstellung der Tabelle, falls sie noch nicht existiert
dbGetQuery(con, "CREATE TABLE IF NOT EXISTS network_data (from_node TEXT, to_node TEXT)")
UI
ui <- fluidPage(
titlePanel("Mit wem haben Sie sich unterhalten?"),
sidebarLayout(
sidebarPanel(
textInput("myName", "Ihr Name:"), # Textfeld für den eigenen Namen
textInput("otherNames", "Namen Ihrer Gesprächspartner:innen (durch Komma getrennt):"), # Textfeld für andere Namen
actionButton("confirmButton", "Bestätigen") # Button für die Bestätigung
),
mainPanel(
div(class = "times-new-roman", plotOutput("socialNetwork")) # Setzen der Schriftart im div-Container
)
)
)
Server
server <- function(input, output, session) {
Initialisierung der Daten
data <- reactiveVal(NULL)
observeEvent(input$confirmButton, {
# Verarbeitung der Eingaben und Aktualisierung der Datenbank
otherNames <- unlist(strsplit(input$otherNames, ","))
otherNames <- trimws(otherNames)
newConnections <- data.frame(from = rep(input$myName, length(otherNames)),
to = otherNames,
stringsAsFactors = FALSE)
# Daten aus der Datenbank lesen
existingData <- dbReadTable(con, "network_data")
# Kombinieren der Daten
combinedData <- rbind(existingData, newConnections)
# Schreiben der kombinierten Daten zurück in die Datenbank
dbWriteTable(con, "network_data", combinedData, overwrite = TRUE)
# Aktualisieren der Daten-ReactiveVal
data(combinedData)
})
output$socialNetwork <- renderPlot({
# Dynamische Aktualisierung des Netzwerks
if (!is.null(data())) {
graph <- graph_from_data_frame(data(), directed = TRUE)
# Anzahl der Knoten im Graphen
num_nodes <- vcount(graph)
ggraph(graph, layout = "fr") + # Fruchterman-Reingold-Prozedur für das Layout
geom_edge_link(arrow = arrow(type = "open",
length = unit(0.03, "npc"),
ends = "last",
angle = 15))+
geom_node_point(size = log(num_nodes*3),
color = "black") +
geom_node_text(aes(label = name),
size = ifelse(num_nodes <= 5, 10, 10 / sqrt(num_nodes)),
family = "Arial",
color = "black",
repel = TRUE) +
theme_void() +
ggtitle("Soziales Netzwerk")
}
})
Code zum Sichern der Datenbankverbindung beim Schließen der App
session$onSessionEnded(function() {
dbDisconnect(con)
})
}
shinyApp(ui, server)