Ceci est mon premier message et j'essaye de respecter toutes les consignes.
Merci de me dire si c'est ok ! ;)
EDIT [21h]: J'ai oublie de mettre les "library"
Voici la liste , je ne sais pas si elles sont toutes utile pour le code ci dessous... (J'ai quand meme supprimer celle que j'ai dont je suis sur qu'elle ne sont pas utiliser par cela ici.
Code : Tout sélectionner
library(downloader)
library(sf)
library(DT)
library(tidyverse)
library(readxl)
library(readr)
library(dplyr)
library(sp)
library(curl)
library(httr)
library(readxl)
Partie du code qui marche (et qui sert a faire un code reproductible). Les commentaires présents sont aussi pour moi pour améliorer plus tard le script... ^^
Creation des variables
Code : Tout sélectionner
SNCF_Sous_station = "https://ressources.data.sncf.com/explore/dataset/liste-des-sous-stations/download/?format=shp&timezone=Europe/Berlin&lang=fr"
SNCF_Triage = "https://data.sncf.com/explore/dataset/liste-des-triages/download/?format=shp&timezone=Europe/Berlin&lang=fr"
SNCF_Livraison = "https://ressources.data.sncf.com/explore/dataset/sites-de-livraison-sncf-ti-geoparts-v2/download/?format=shp&timezone=Europe/Berlin&lang=fr"
Ici les tables sont dans des fichiers ZIP donc j'ai trouve "un protocole" pour les importer ^^
Import des tables
Code : Tout sélectionner
#SousStationSNCF
temp <- tempfile()
temp2 <- tempfile()
#telecharger le zip depuis internet, sauvegarder dans temp
download.file(SNCF_Sous_station,temp, mode="wb")
#Dezipper le fichier temps et enregistrer les resources déziper dans temp2
unzip(zipfile = temp, exdir = temp2)
#recuperer le chemin d'accès du the shapefile (.shp) file dans le fichieer deziper temp2
#le $ à la fin de ".shp$" assure de ne pas trouver des fichier du style .shp.xml
SousstationSNCF_shpelink<-list.files(temp2, pattern = ".shp$",full.names=TRUE)
#read the shapefile. Alternatively make an assignment, such as f<-sf::read_sf(your_SHP_file)
SousStation_SNCF <-sf::read_sf(SousstationSNCF_shpelink) %>%
st_transform(4326) # safety of unprojected CRS
#Livraison SNCF
temp <- tempfile()
temp2 <- tempfile()
#telecharger le zip depuis internet, sauvegarder dans temp
download.file(SNCF_Livraison,temp, mode="wb")
#Dezipper le fichier temps et enregistrer les resources déziper dans temp2
unzip(zipfile = temp, exdir = temp2)
#recuperer le chemin d'accès du the shapefile (.shp) file dans le fichieer deziper temp2
#le $ à la fin de ".shp$" assure de ne pas trouver des fichier du style .shp.xml
LivraisonSNCF_shpelink<-list.files(temp2, pattern = ".shp$",full.names=TRUE)
#read the shapefile. Alternatively make an assignment, such as f<-sf::read_sf(your_SHP_file)
Livraison_SNCF <-sf::read_sf(LivraisonSNCF_shpelink) %>%
st_transform(4326) # safety of unprojected CRS
#Triage SNCF
temp <- tempfile()
temp2 <- tempfile()
#telecharger le zip depuis internet, sauvegarder dans temp
download.file(SNCF_Triage,temp, mode="wb")
#Dezipper le fichier temps et enregistrer les resources déziper dans temp2
unzip(zipfile = temp, exdir = temp2)
#recuperer le chemin d'accès du the shapefile (.shp) file dans le fichieer deziper temp2
#le $ à la fin de ".shp$" assure de ne pas trouver des fichier du style .shp.xml
TriageSNCF_shpelink<-list.files(temp2, pattern = ".shp$",full.names=TRUE)
#read the shapefile. Alternatively make an assignment, such as f<-sf::read_sf(your_SHP_file)
Triage_SNCF <-sf::read_sf(TriageSNCF_shpelink) %>%
st_transform(4326) # safety of unprojected CRS
#suprression des fichiers intermediaires
remove(TriageSNCF_shpelink,LivraisonSNCF_shpelink,SousstationSNCF_shpelink)
remove(SNCF_Sous_station, SNCF_Triage, SNCF_Livraison)
Traitement des tables
Code : Tout sélectionner
#creation d'une liste avec un critère de nom
sncf_list = mget(ls(pattern = ("SNCF$")))
#Cette manipulation est a lancé qu'une fois sinon elle rajouter des doublons à chaque fois....
#le dollar precise que les caractères SNCF sont les dernier à prendre en compte, comme pour l'import shape
Code : Tout sélectionner
#Creation de la source
Liste_SNCF_Source <- lapply(sncf_list, function(x){
x$source<- "SNCF"
return(x)
})
C’est la que ca se gatte, je souhaiterais automatiser la création d’une variable « table » qui pour chaque table de la liste épendrait du nom de celle ci. Par exemple pour la table de provenance « Livraison_SNCF » celle ci aurait comme nom « Livraison ».
J’ai bien sur d’autre source, et d’autre tables pour lequel je repetterais le processus du code.
Pour les plus petit groupe (2 a 5 table) j’écris pour l’instant en dur, pour chaque table, mais j'avoue que quand ca dépasse les 5 ca me soule un peu.... sans compter que le code devient TRES long. Et comme la liste est creer "automatiquement" a partir d'un bout du nom je ne sais pas dans quel ordre il les ajoute...
Code : Tout sélectionner
Livraison_SNCF = as.data.frame(list(Liste_SNCF_Source[[1]]))
Livraison_SNCF$table = "Livraison"
SousStation_SNCF = as.data.frame(list(Liste_SNCF_Ssource[[2]]))
SousStation_SNCF$table = "SousStation"
Triage_SNCF = as.data.frame(list(Liste_SNCF_Source[[3]]))
Triage_SNCF$table = "Triage"
Je termine par remttre les elements de la liste dans l'environnement
Code : Tout sélectionner
#list2env(Liste_SNCF_Source, .GlobalEnv) pour l'instant creation des tables pour les variables de table donc non !
remove(Liste_SNCF_Source)
Voici les codes de la boucle for que j'ai testé
Methode 1
Code : Tout sélectionner
for (i in seq(Liste_SNCF_Source)) {
lapply(sncf_list, function(x){
x$table<- "[[i]]"
function(x) {x$table <- "[[i]]"
}
}
Methode 2
Code : Tout sélectionner
Pas de message d’erreur mais ca ne me créer pas la variable que je souhaite.
Methode 2
for (i in seq(Liste_SNCF_Source)) {
lapply(Liste_SNCF_Source, function(x){
x$table<- "[[i]]"
return(x) }
)
}
Pour ces deux methodes : pas de message d'erreur mais pas non plus de variables adéquates creer....
Methode 3 : Mon i étant pas un numero j’ai essayé mais sans i croire.
Code : Tout sélectionner
for (i in seq(Liste_SNCF_Source)) {
i$table = as.character(i)
}
Error in as.character[i] : objet de type 'builtin' non indiçable
J'ai peut etre mal compris le principe de la boucle for , mais pour moi c'est pour i de 1 a x (nombre donnée ou déterminer par la liste) faire
creation d'une variable = nom de la table en caractère
Mais est ce possible ?
PS : je suis consciente que mon message est très long mais j'espère qu'il ne vous rebuttera pas pour m'aider. Merci d'avance !