0
votes

Opérations dans des boucles imbriquées dans les variables de format nom de fichier dans r

Le code suivant fonctionne bien dans R, et j'ai reçu ce codage en utilisant la fonction «Dis» dans la boucle imbriquée (SID, Session) de Matlab pour faire ce truc. XXX

Alors maintenant Le codage est une combinaison de R + Matlab, qui n'est pas si efficace.

Il devrait y avoir des moyens de rendre possible dans R?

J'ai essayé de coder comme suit avec de petites modifications en fonction de la solution possible sur Internet plusieurs fois déjà, xxx

Cependant, le message d'erreur ci-dessous Affiche à chaque fois,

"Erreur dans le fichier (fichier," rt "): Invalid 'Description'" argument "

Comment faire fonctionner l'opération?

Merci.


3 Réponses :


0
votes

Considérez la construction d'une liste de cadres de données en construisant d'abord un vecteur de noms de fichiers et en les transmettant à un intitulé code> ou sapply code> appel. Ci-dessous utilise sapply code> pour générer une liste de saisie de données nommée (vs nom).

# CREATE VECTOR OF FILE NAMES (PASSING TWO VECTORS)
filenames <- as.vector(sapply(SID, 
                              function(x,y) paste0("S", ifelse(x < 10, 
                                                               paste0("0", x),
                                                               paste(x)), 
                                                   "_0", y),
                              S)
                      )

# CREATE NAMED LIST OF DATA FRAMES (PASSING ONE VECTOR) 
df_list <- sapply(filenames, function(i) {
                     fname <- paste0(substr(i, 2, nchar(i)),".csv")
                     read.csv(fname, header=TRUE, sep=",")
                  }, simplify=FALSE)

# ACCESS INDIVIDUAL DATA FRAMES    
df_list$S09_01  
df_list$S09_02
df_list$S09_03
...


4 commentaires

Merci @parfait, la liste DF_List a fait une liste imbriquée avec SID et S comme mentionné. Cependant, le contenu à l'intérieur de chaque fichier .csv n'a pas pu être lu ... tous deviennent "un data.frame avec 0 lignes et une colonne" dans la colonne Valeur lors de la visualisation df_list. et "pas de données disponibles dans le tableau" lors de la visualisation dans df_list $ sid_s. Il devrait y avoir un moyen de faire face à un puzzle de boucle imbriquée et de faire une opération facile comme Lis.CSV ici dans R. Essayons de garder une foi en toujours :)


J'ai mis à jour le code de passage de vos arguments originaux de en-tête et SEP que je pensais être redondants étant des valeurs par défaut, mais peut différer dans vos paramètres de langue / région.


Merci @parfait. Après le redémarrage R, vos codes fonctionnent. Maintenant, je peux avancer à d'autres étapes, telles que certaines colonnes nécessaires, remplacez certaines valeurs et ainsi de suite avec R + Matlab avant :)


Oui, j'ai appuyé sur l'icône Up plusieurs fois et cela montre "Merci pour les commentaires! Les votes exprimés par ceux qui ont moins de 15 réputations sont enregistrés, mais ne modifient pas le score post publié publiquement." Désolé pour cela, j'en ai 11 seulement maintenant ... mais j'apprécie tes jolis codes pour que je puisse récupérer une certaine confiance en r :) bonne journée



0
votes

Cette question touche plusieurs problèmes:

  1. Comment lire un grand nombre de fichiers CSV en une fois, LI>
  2. Comment créer un vecteur de noms de fichiers à partir de 2 vecteurs d'entrée entier dans le format approprié. LI> ol>

    article 1. a été posé et répondu à plusieurs reprises avant et est aussi au cœur de Réponse de Parfait . P>

    Cette réponse se concentre sur l'élément 2. p>

    En complexité ajoutée, les noms de fichiers suivent le schéma "09_06.csv" code>, " 10_01.csv " code> (y compris l'extension de fichier) tandis que les données résultantes sont nommées " s09_06 " code>, " s10_01 " code> (avec un "s" code> mais sans l'extension de fichier). p>

    La création de basenames (sans préfixe ni extension de fichier) dans le format approprié peut être simplifiée à l'aide de externe () et sprintf () code>: p> xxx pré>

    library(data.table)
    library(magrittr)
    SID = c(9, 10)
    S = 1:6
    fn <- outer(SID, S, sprintf, fmt = "%02i_%02i.csv")
    set.seed(1L)
    nr = 2L
    dfl <- replicate(
      length(SID)*length(S), 
      data.frame(V1 = sample(LETTERS, nr), V2 = sample.int(100, nr), V3 = rnorm(nr)),
      simplify = FALSE
      ) %>% 
      set_names(fn) 
    lapply(fn, function(x) fwrite(dfl[[x]], file = x))
    


4 commentaires

Merci, @uwe. Votre explication est facile à comprendre et le même résultat obtenu avec vos codes pour la NAMELIST .CSV (SID_S). Cependant, le contenu de chaque fichier .csv n'a pas pu être lu lors de l'exécution de «DF_LIST <- Lapply (Paste0 (BaseNames," .csv "), Read.csv, Header = TRUE, SEP =", ") '. Message d'erreur: "Erreur dans le fichier (fichier," rt "): impossible d'ouvrir la connexion". df_list @ Parfait pourrait le faire :)


Cela a été causé parce que j'avais négligé que vos noms de fichiers sont pas préfixées par "s" . J'ai corrigé cela.


Merci, @uwa. Nous sommes les gars qui veulent toujours faire du codage fonctionnant :) Cependant, mon format de données est UTF-16, qui n'est pas pris en charge par Fread. Les boucles imbriquées sans fin pourraient être facilement fabriquées par Matlab sans effort et apparemment, ce n'est pas le cas dans ... Merci encore d'avoir remarqué quelles mesures à prendre pour le prochain. Bonne journée : )


Oh je vois. UTF-16 semble avoir été un problème ( github.com/rdataTable/data.table/ Problèmes / 2560 ) En effet, mais selon Github.com/rdatatable/data. Tableau / Problèmes / 2435 La version de développement 1.12.3 de données.Table a fixé le problème, IIUC.



0
votes

Merci les deux, @ Parfait @ uwe

Parce qu'il y a des centaines de marches derrière Read.csv et la difficulté de boucles imbriquées dans R, m'a conduit à se tourner vers Matlab pour que ces astuces fonctionnent plutôt.

Bien que j'ai eu les résultats que je veux déjà, mais c'est comme un codage semi-automatique. Chaque étape liée aux boucles doit à nouveau modifier dans Matlab lors de l'ajout de nouveaux participants et de la remettre à R à exécuter.

Il devrait y avoir des moyens de manipuler tous les codes de rarement, de faire plus de 100 milliers de lignes en moins et efficacement.

Chaque valeur doit être calculée individuellement dans différentes conditions avant d'exécuter ANOVA ou ANCOVA. Ou pensez-vous qu'il vaut mieux être traité de la liste de la liste?

Par exemple, comme un taux manquant ou d'erreur de chaque participant basé sur le jugement logique de la combinaison de différentes colonnes?

Je ne peux que le faire fonctionner avec R + Matlab, mais il devrait y avoir des moyens de faire face à R uniquement.

C'est pourquoi j'ai commencé cette question et j'espère qu'il y aura des solutions.

Tous les commentaires seront appréciés.

Merci et bonne journée :)


1 commentaires

Parce que les centaines de boucles imbriquées qui ne pouvaient pas être codées dans R, doivent se tourner vers Matlab codant uniquement pour rendre le codage "réel automatique", au lieu de codage "semi-automatique" :) besoin de dire au revoir à r maintenant. Cependant, le traçage r est toujours excellent que les autres :)