Problème script sur Mac

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Dyman Colson
Messages : 3
Enregistré le : 25 Sep 2020, 09:36

Problème script sur Mac

Messagepar Dyman Colson » 28 Sep 2020, 07:29

Bonjour !
Dans le cadre d'une analyse de données dans une rechercher en biologie, un collègue m'a transféré un de ces scripts qui tourne très bien sous Windows... Cependant sur mon mac , il fonctionne sur certains fichiers mais pas sur d'autres. Pourtant tous les fichiers ont la même origine et sont organisés de la même manière ...

RSTUDIO m'annonce cette erreur : Error in matrix(if (is.null(value)) logical() else value, nrow = nr, dimnames = list(rn, :
data is too long

Voici les lignes de script où ca coince
-----------------------------------------------------------------------------------------

path <- "/Users/dylancolson/Desktop/profish perso/Rothenfels_2020"
setwd(path)
#definition chemin d'accès

library("RColorBrewer")

####variables entree####

delayTAG <- 1 #tags émettent toutes les secondes
frequences <- c(150.795,150.800,150.805,150.755, 150.760, 150.765) #frequences utilisées

nbdetection_min <- 3
int_tps_max <- 5 * delayTAG
#besoin de 3 détections minimums dans un laps de temps de 3*temps émissions des tags

date_debut_suivi <- "2020-09-01 00:00:00"

Code <- read.table('ID_TAG.txt', h=T) #importation des codes utilisés

#Tri des fausses détections

###compil des fichiers #####
Data <- do.call ( rbind, lapply(dir(paste(path,'/Download 03092020/', sep='')), function (x) {

tmp <-read.table(paste(path,'/Download 03092020/',x, sep=''), h=T)

tmp <- tmp[ tmp$Code %in% Code$Lotek_code, ]
tmp <- tmp[ tmp$Freq %in% frequences, ]

#do.call rbind vient coller ensemble plusieurs dataframes. Lapply repete le bind sur plusieurs fichier via dir(paste).
# la fonction importe les differents dataframes dans "tmp".
# tmp <- tmp[ tmp$Code %in% Code$Lotek_code, ] selectionne les codes utilisés (code<- ID_TAG)
# tmp <- tmp[ tmp$Freq %in% frequences, ] selectionne les frequences utilisées


if (dim( tmp[1]>0) ) {
tmp$Ant <- sub('.txt','',tail(strsplit(x ,split ='_')[[1]], n=1) ) }
# pas tout compris mais cette partie du code sert a remplacé la donnée dans antenne (=1) par le numéro de l'antenne provenant du nom de fichier

return(tmp)
})
)
---------------------------------------------------------------------------------

voici un lien avec les données utilisées https://we.tl/t-RWvlbv5602

Merci pour vos réponses

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Problème script sur Mac

Messagepar Mickael Canouil » 28 Sep 2020, 07:57

Bonjour,

Pour information (et notre confort de lecture), il y a des balises de code (bandeau d'édtion des messages) pour encapsuler le code.

Votre code n'étant pas reproductible, ce type d'erreur peut venir de plusieurs endroits.

Ceci étant dit, le seul intérêt de setwd() est de pouvoir utiliser des chemins relatifs, or dans le code présenté ici, tous les chemins sont fournis de façon absolue, ce qui pourrait aboutir à des chemins excessivement long (et visiblement avec des espaces ...).
setwd() est aussi une garantie de la non reproductibilité du code, puisque le chemin n'existe que pour la personne ayant écrit cette ligne.

Le code ci-dessous est bien évidemment non testé.

Code : Tout sélectionner

setwd("/Users/dylancolson/Desktop/profish perso/Rothenfels_2020")

library("RColorBrewer")

delayTAG <- 1
frequences 
<- c(150.795, 150.800, 150.805, 150.755, 150.760, 150.765)
nbdetection_min <- 3
int_tps_max 
<- 5 * delayTAG
date_debut_suivi 
<- "2020-09-01 00:00:00"

Code <- read.table("ID_TAG.txt", header = TRUE)

Data <- do.call(rbind, lapply(dir("Download 03092020"), function(x) {
  tmp <- read.table(file.path("Download 03092020", x), header = TRUE))
  tmp <- tmp[tmp$Code %in% Code$Lotek_code & tmp$Freq %in% frequences, ]

  if (dim(tmp[1] > 0)) {
    tmp$Ant <- sub(".txt", "", tail(strsplit(x, split = "_")[[1]], n = 1)) 
    
# me paraît bien compliqué pour extraire un morceau de chaîne de caractères est pourrait être remplacé par:
    # tmp$Ant <- sub(".*_([^_]*).txt$", "\\1", x)
  }

  tmp
}))


Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: Problème script sur Mac

Messagepar Facundo Muñoz » 28 Sep 2020, 08:22

Bonjour,

D'abord, quelques recommandations pour faciliter vous faire aider :

1. Utilisez les blocs "Code" pour copier-coller du code

2. Evitez d'utiliser des routes (paths) fixées dans votre code. Vos fichiers ne sont pas dans la même route chez vous que chez moi. Alors vous m'obligez à modifier votre code pour que ça marche chez moi. À la place, utilisez des routes relatives.


Sinon, j'ai pas eu d'erreur pour l'exécution de votre code et les fichiers ont été bien lus dans l'objet Data. Cependant, j'ai eu quelques warnings qui concernent le test

Code : Tout sélectionner

dim(tmp[1]>0)


En effet, tmp est un data.frame, tmp[1] est le sous-data.frame avec la première variable (Date) seulement. Comparer tmp[1] contre 0 n'a pas beaucoup de sens : ça donne un data.frame de la même taille plein de TRUE. D'ailleurs, la dimension de ce data.frame est nrow(tmp) x 1, ce qui donne 2 valeurs pour le if().
Je pense que vous vouliez faire, peut-être était évaluer

Code : Tout sélectionner

dim(tmp)[1] > 0  # ou bien, nrow(tmp) > 0


En tout cas, ce problème ne peut pas être à l'origine de votre erreur. Je suis sous Linux. Je ne crois pas qu'il s'agisse d'un problème de système d'exploitation. Peut-être un problème de mémoire (c.f. message "data is too long") ?
Pouvez-vous executer

Code : Tout sélectionner

traceback()
sessionInfo()

juste après avoir déclenché l'erreur ?

Cordialement,
ƒacu.-

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: Problème script sur Mac

Messagepar Facundo Muñoz » 28 Sep 2020, 08:31

Cet article [1] sur des différents méthodes pour lire un ensemble de fichiers csv peut vous aider. Notamment, il paraît que l'utilisation des fonctions rbindlist() et fread() du package data.table consomment moins de mémoire (et sont plus rapides).

Cordialement,

[1] https://jozef.io/r917-fread-comparisons/
ƒacu.-

Dyman Colson
Messages : 3
Enregistré le : 25 Sep 2020, 09:36

Re: Problème script sur Mac

Messagepar Dyman Colson » 28 Sep 2020, 08:37

ok désolé pour la présentation pourrie, je vais en tenir compte et essayer de rendre mon code reproductible dès que possible.

Voici la sortie après traceback() et sessionInfo()

Code : Tout sélectionner

> traceback()

    5: matrix(if (is.null(value)) logical() else value, nrow = nr, dimnames = list(rn,
    cn))
    4: Ops.data.frame(tmp[1], 0) at #14
    3: FUN(X[[i]], ...)
    2: lapply(dir(paste(path, "/Download 03092020/", sep = "")), function(x) {
    tmp <- read.table(paste(path, "/Download 03092020/", x, sep = ""),
    h = T)
    tmp <- tmp[tmp$Code %in% Code$Lotek_code, ]
    tmp <- tmp[tmp$Freq %in% frequences, ]
    if (dim(tmp[1] > 0)) {
    tmp$Ant <- sub(".txt", "", tail(strsplit(x, split = "_")[[1]],
    n = 1))
    }
    return(tmp)
    })
    1: do.call(rbind, lapply(dir(paste(path, "/Download 03092020/",
    sep = "")), function(x) {
    tmp <- read.table(paste(path, "/Download 03092020/", x, sep = ""),
    h = T)
    tmp <- tmp[tmp$Code %in% Code$Lotek_code, ]
    tmp <- tmp[tmp$Freq %in% frequences, ]
    if (dim(tmp[1] > 0)) {
    tmp$Ant <- sub(".txt", "", tail(strsplit(x, split = "_")[[1]],
    n = 1))
    }
    return(tmp)
    }))

Code : Tout sélectionner

> sessionInfo()

    R version 3.6.3 (2020-02-29)
    Platform: x86_64-apple-darwin15.6.0 (64-bit)
    Running under: macOS Catalina 10.15.4

    Matrix products: default
    BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
    LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib

    locale:
    [1] fr_BE.UTF-8/fr_BE.UTF-8/fr_BE.UTF-8/C/fr_BE.UTF-8/fr_BE.UTF-8

    attached base packages:
    [1] stats graphics grDevices utils datasets methods base

    other attached packages:
    [1] RColorBrewer_1.1-2

    loaded via a namespace (and not attached):
    [1] compiler_3.6.3 tools_3.6.3

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: Problème script sur Mac

Messagepar Facundo Muñoz » 28 Sep 2020, 09:47

Le problème est au niveau de la comparaison tmp[1] > 0.
Essayez de corriger cette condition comme je vous ai dit tout à l'heure.

Cordialement,
ƒacu.-

Dyman Colson
Messages : 3
Enregistré le : 25 Sep 2020, 09:36

Re: Problème script sur Mac

Messagepar Dyman Colson » 02 Oct 2020, 11:10

OK ca marche Nickel maintenant ! Un grand merci


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité