Avec certain appareil nous obtenons une hierarchie de fichier ainsi :
Des fichiers qui contiennent nos données pour un individus (Un fichier par individus) (oui les données sont organisées sur une seule colonne)
Ces fichiers sont dans un dossier 1 dossier par session (jour d'expérimentation) qui sont eux même mis dans un dossier d'expérience.
J'ai donc écrit les trois fonctions suivante :
- Lecture du fichier d'un individus
Code : Tout sélectionner
get_subjects_data = function(path_file, prog){
#Découpage du path_file pour obtenir les informations qui y sont contenue :
filname <- tail( unlist(stringr::str_split(path_file, "/")),1)
date <- stringr::str_split(filname, "_")[[1]][1]
# Cette fonction lit un fichier csv et en modifie le contenu en fonction de l'expérience
dataframe <- read.csv2(path_file, header = FALSE, stringsAsFactors = FALSE)
#We read the information of shock power
shock_value <- dataframe[c(46:66),1]
#We get and organize results
tmp <- stringr::str_split(as.character(dataframe[c(121:nrow(dataframe)),1]),"\\.", simplify = TRUE)
if (ncol(tmp) == 1) { tmp <- cbind(tmp[,1], "0") }
res <- data.frame(Times = tmp[,1], shock_level = tmp[,2], stringsAsFactors = FALSE)
res[which(res$shock_level == ""),"shock_level"] = 0
res <- dplyr::mutate(res, date = date,
subject = dataframe[7,1],
Times = as.numeric(as.character(Times))/10,
shock_level = as.character(shock_level),
shock_level = dplyr::if_else(shock_level == "1" | shock_level == "2", as.character(as.numeric(shock_level)*10), shock_level),
shock_level = as.numeric(shock_level),
shock_val = as.numeric(shock_value[(shock_level + 1)]),
latency = compute_latency(Times),
program = prog#,
# debug = path_file
)
return(res)
}
- Lecture du dossier de session
Code : Tout sélectionner
read_session <- function(pathdir){
listefile <- dir(path = pathdir)
info <- tail( unlist(stringr::str_split(pathdir, "/")),1)
prog <- stringr::str_extract(info, "[tT|sS].*$")
dfoutput <- NULL
for (i in listefile) {
print(i)
dfi <- get_subjects_data( normalizePath(stringr::str_c(pathdir,i, sep = "/")),
prog = prog)
dfoutput <- dplyr::bind_rows(dfoutput, dfi)
}
return(dfoutput)
} - Lecture du dossier d'expérimentation
Code : Tout sélectionner
compile_experiment <- function(pathdir){
listesession <- list.dirs(path = pathdir, recursive = FALSE)
output <- NULL
# dfoutput <- sapply(listesession, FUN = function(x){
# dfi <- read_session(x)
# dfoutput <- dplyr::bind_rows(dfoutput, dfi)
# })
for (i in listesession) {
print(i)
dfi <- read_session(i)
output <- dplyr::bind_rows(output, dfi)
}
return(output)
}
Ma question c'est pour vous quels sont les points d'optimisation possible je présume dans un premier temps remplacer les boucles for par des apply ? mais comme vous pouvez le voir j'ai fait une tentative sans succès.
Merci