Skip to content

Loop over folder files

16 messages · Michael Dewey, David Winsemius, MacQueen, Don +2 more

#
Hi
I need to apply some code over some stata files that are in folder.
I've wrote this

library(foreign)

fuente=list.files("C:/Users/Jceccarelli/Bases/Stata", pattern="dta$",
full.names=FALSE)

for (i in 1:length(fuente)){

xxx=read.dta(fuente[i], to.data.frame=TRUE)


}

But i get this error

Error in read.dta(fuente[i], to.data.frame = TRUE) :
  unused argument (to.data.frame = TRUE)

What am i doing wrong?
#
Hello,

That argument doesn't exist, hence the error.
Read the help page ?read.dta more carefully. You will see that already  
read.dta reads into a data.frame.

Hope this helps,

Rui Barradas
?

Citando Juan Ceccarelli Arias <jfca283 at gmail.com>:
?
#
I removed the data,frame=True...
I obtain this warnings...
Error in read.dta(fuente[i]) : not a Stata version 5-12 .dta file
In addition: There were 50 or more warnings (use warnings() to see the
first 50)

the warnings() throws this
Warning messages:
1: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else
paste0(labels,  ... :
  duplicated levels in factors are deprecated
2: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else
paste0(labels,  ... :
  duplicated levels in factors are deprecated
3: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else
paste0(labels,  ... :
  duplicated levels in factors are deprecated
4: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else
paste0(labels,  ... :
  duplicated levels in factors are deprecated
5: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else
paste0(labels,  ... :
  duplicated levels in factors are deprecated
On Mon, Aug 22, 2016 at 2:32 PM, <ruipbarradas at sapo.pt> wrote:

            

  
  
#
Well, that seems fairly self-explanatory. What version of Stata are you using and does it have capacity to write to one of hte versions that are supported by read.dta?
#
Dear Juan

If this is a Stata 13 file the package readstata13 available from CRAN 
may be of assistance.
On 22/08/2016 18:40, Juan Ceccarelli Arias wrote:

  
    
  
#
Hello,

The op could also use package sos to find that and other packages to  
read stata files.

install.packages("sos")

library(sos)
findFn("stata")
found 374 matches;? retrieving 19 pages
2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19
Downloaded 258 links in 121 packages

The first package is readstata13 but there are others.

Hope this helps,

Rui Barradas

?

Citando Michael Dewey <lists at dewey.myzen.co.uk>:
?
#
Im running this but the code doesn't seem work.
It just hangs out but doesn't show any error.


for (i in 1:length(fuente)){

xxx=read_dta(fuente[i])

table(xxx$cise, xxx$sexo)

rm(xxx)

}
On Tue, Aug 23, 2016 at 6:31 AM, <ruipbarradas at sapo.pt> wrote:

            

  
  
#
I still find the behavior of R's `for`-loop to be rather puzzling. In this case you appear to be getting the operation done, but because you didn't assign those table values to a variable they just disappeared.

Try this:

XXX <- list()

for (i in 1:length(fuente)){
   xxx=read_dta(fuente[i])
   XXX[[i]] <- table(xxx$cise, xxx$sexo)
   rm(xxx)
}
str(XXX)

Seems to me that if you can do assignment to the parent environment (without actually using assign( ..., env=...)  that you should also be able to see the results of evaluation occurring inside the for loop, but for-loops return NULL. So you see nothing.

David.
David Winsemius
Alameda, CA, USA
#
Hello,

Where does read_dta come from? You should also post the library() instruction.
Try to run the code without the loop, with just one file and inspect  
xxx to see what's happening.

xxx <- read_dta(fuente[1])
str(xxx)
table(xxx$cise, xxx$sexo)

Rui Barradas
?

Citando Juan Ceccarelli Arias <jfca283 at gmail.com>:
?

Liga??es:
---------
[1]
#
Compare what happens with these two command:

for (i in 1:3) { table(letters[1:4])  }
for (i in 1:3) { print(table(letters[1:4]))  }

Then try modifying your loop similarly.
#
Or maybe a print() statement on the table() in the loop.

print(table(...))

Rui Barradas
?

Citando David Winsemius <dwinsemius at comcast.net>:
?
#
I just doesn't work...
Im loading the read,dta13 package already.
When i try to perform a simple table(sex), i received the "File not found"
message.
However, if i load the data using the file.choose() option inside
read.dta13, i can open the stata file.
I don't know what am i doing wrong...
On Tue, Aug 23, 2016 at 5:08 PM, <ruipbarradas at sapo.pt> wrote:

            

  
  
#
Hello,

That means that probably the files are in a different folder/directory.
Use getwd() to see what is your current directory and
setwd("path/to/files") to set the right place where the files can be found.

Rui Barradas
?

Citando Juan Ceccarelli Arias <jfca283 at gmail.com>:
?

Liga??es:
---------
[1]
#
The error wasn't in the loop. It was in the file list.
It's running now because i added full.names option to TRUE
fuente=list.files("C:/Users/Jceccarelli/Bases/Stata", pattern="dta$",
full.names=T)
Now R can proccess the data. Now it callapses or stops because other kind
of error.
?Should i open another topic or just use the mail list?
By the way, thank you all.
On Wed, Aug 24, 2016 at 11:48 AM, <ruipbarradas at sapo.pt> wrote:

            

  
  
#
Maybe it's better to open a new thread.

Rui Barradas
?

Citando Juan Ceccarelli Arias <jfca283 at gmail.com>:
?

Liga??es:
---------
[1]
#
Ok. Please, declare this issue as solved.
And thanks again for your help.
On Wed, Aug 24, 2016 at 2:18 PM, <ruipbarradas at sapo.pt> wrote: