0
votes

I've written out codes for one particular file, and now I want to generate the same kind of graphs and files for the rest of similar data files, I wrote commands as the following, however, it doesn't work... When I plugged in these codes, R produced only one plot for the file "eight", and it states my error(see below) I have edited and checked my codes so many times but still couldn't figure out what's wrong with it...would you please help me?

I really really appreciate your help!

my.files <- list.files()
for (i in 1: length(my.files)) {
temp.dat <- read.csv(my.files[i])
eight <- read.csv(file="8.csv", header=TRUE, sep=",")
eightout <- subset(eight, inout=="Outgoing from panel hh" & o_duration>0, select=c(inout, enc_callee, o_duration))
f <- function(eightoutf) nrow(eightoutf)
eightnocalls <- ddply(eightout,.(enc_callee),f)
colnames(eightnocalls)[2] <- "nocalls"
eightout$nocalls <- eightnocalls$nocalls [match(eightout$enc_callee, eightnocalls$enc_callee)]
eightout=data.frame(eightout,"time"=c(1:nrow(eightout)))
M <- plot(eightout$time,eightout$nocalls)
pdf(paste(Sys.Date(),"_",my.files[i],"_.pdf", sep=""))
plot(temp.dat$time, temp.dat$nocalls, main=my.files[i])
dev.off() }

This is what R says Error in plot.window(...) : need finite 'xlim' values In addition: Warning messages: 1: In min(x) : no non-missing arguments to min; returning Inf 2: In max(x) : no non-missing arguments to max; returning -Inf 3: In min(x) : no non-missing arguments to min; returning Inf 4: In max(x) : no non-missing arguments to max; returning -Inf

1
see my comment below about trouble-shooting. It's impossible to debug this without a reproducible example, and very frustrating to try to debug remotely. Your code doesn't actually make much sense to me, since it reads temp.dat but then doesn't appear to use it for any of the subsequent manipulations. I'm afraid I'm out of time and patience for this one ... sorry ...Ben Bolker

1 Answers

2
votes

Try inserting dev.off() after your plot command ... ? (If you want a bunch of separate files. If you one want one big file of plots, then open your PDF file before you start the loop and close it after the end of the loop.)

Trying again with a cleaned-up version of code above.

my.files <- list.files("/E/Data")
for (i in seq_along(my.files)) {
  temp.dat <- read.csv(my.files[i])
   seven <- subset(alldata, aserno==7, select=c(I,C,D),
                     I=="o" & D>0)
   sevennumber <- ddply(sevenout,.(C), nrow)
   colnames(sevennumber)[2] <- "number"
   sevenout$number <- sevennumber$number[match(sevenout$C,sevennumber$C)]
   sevenout$time <- seq(nrow(sevenout))
   pdf(paste(Sys.Date(), my.files[i], "M.pdf", sep="_"))
   with(sevenout,plot(time, number, main=my.files[i])
   dev.off()  ## CLOSE pdf
   write.csv(sevenout,paste(Sys.Date(),
       my.files[i],"new_data.pdf”,sep="_"), row.names=FALSE)
}

Remaining weirdnesses/questions:

  • tmp.datout is referred to but not defined. Should it have been sevenout?
  • the plot was made with type="n", which would have led to an empty plot frame. ???
  • I'm assuming that the manipulations are correct, since I can't reconstruct them.
  • if in doubt try setting i <- 1 and execute the code within your loop manually to see what happens ...