2012-04-12 4 views
1

J'ai beaucoup d'exemplaires de deux types (a + b) du fichier txt-à-dire:analyse Automatiser sur plusieurs fichiers txt

a1.txt a2.txt a3.txt... and b1.txt b2.txt b3.txt 

Mon but est d'exécuter un script r qui effectue les opérations suivantes:

read.table a1.txt 
#run a bunch of code that chops and changes the data and then stores some vectors and data  frames. 
w<-results 
x<-results 
detach a1.txt 
read.table b1 .txt 
#run a bunch of code that chops and changes the data and then stores some vectors and data frames. 
y<-results 
z<-results 
model1<-lm(w~y) 
model2<-lm(x~z) 

Chaque fois que je veux extraire des coefficients de par exemple 1 pente pour les pentes 1 et 2 du modèle 2. Je souhaite exécuter cette analyse de manière automatisée sur toutes les paires de fichiers texte a et b et construire les coefficients au format vectoriel dans un autre fichier. pour les analyses ultérieures.

Jusqu'à présent, j'ai seulement pu obtenir des bits et des bobs à partir d'analyses plus simples like this. Est-ce que quelqu'un a la meilleure idée sur la façon d'exécuter cette itération plus complexe sur de nombreux fichiers?

EDIT: J'ai essayé jusqu'à présent, mais a échoué encore:

your<-function(x) 
{ 
files <- list.files(pattern=paste('.', x, '\\.txt', sep='')) 
a <- read.table(files[1],header=FALSE) 
attach(a) 
w <- V1-V2 
detach(a) 
b <- read.table(files[2],header=FALSE) 
z <- V1-V2 
model <- lm(w~z) 
detach(b) 
return(model$coefficients[2]) 
} 

slopes <- lapply(1:2, your) 
Error in your(1) : object 'V1' not found 
+0

2 choses. Tout d'abord, il vaut mieux éviter d'utiliser 'attach' et' detach'. Deuxièmement, (aurait été évité en s'adressant au premier!) Après avoir lu «b» vous ne le «fixez» pas. Au lieu de cela, utilisez quelque chose comme 'z <- b $ V1 - b $ V2'. – Justin

+0

Je viens juste de me faire craquer avant de revenir à moi. Merci beaucoup! – user1322296

Répondre

3

Vous pouvez faire quelque chose comme:

files <- list.files(pattern='.1\\.txt') # get a1.txt and b1.txt 

si vous savez combien de fichiers que vous avez (permet de dire 10), vous Enveloppez votre code ci-dessus dans une fonction et utilisez l'une des apply famille en fonction de votre sortie souhaitée:

your.function(x) { 
    files <- list.files(pattern=paste('.', x, '\\.txt', sep='')) 
    a <- read.table(files[1]) 
    b <- read.table(files[2]) 

    w <- ... 
    x <- ... 

    y <- ... 
    z <- ... 

    model1 <- lm(w~y) 
    model2 <- lm(x~z) 

    return(c(model1$coefficients[2], moedl2$coefficients[2])) 
} 

slopes <- lapply(1:10, your.function) 
+0

Salut Justin, merci pour votre réponse, pourriez-vous clarifier la 'list.files (motif = coller ('.', X, '\\. Txt', sep = ''))' section, je ne sais pas ce que le '('.', x, '\\. txt', sep = '')' arguments prennent – user1322296

+0

'paste' prend un nombre arbitraire d'arguments et les combine avec le séparateur spécifié (' sep = '' 'ne donne aucun séparateur). par exemple. 'paste ('foo', 'bar', sep = '')' versus 'paste ('foo', 'bar', sep = '!')'. Est ce que ça aide? Je suis juste en écrasant l'index (le nombre 1 à 10) sur une expression régulière qui correspond à un seul caractère (a ou b) plus number.txt (donc il devrait trouver a1.txt et b1.txt si x = 1). Clair comme de la boue, je suis sûr! – Justin

Questions connexes