[R] Am having trouble calling a function

Carl Witthoft carl at witthoft.com
Sun Aug 28 00:17:48 CEST 2011


First of all, please replace your "=" with "<-"  per general R-usage rules.
Next: you need to provide a clear listing of doAirport.R so we can tell 
what it actually is, and what you've done outside the function.

That said, my suspicion is that your parent function (the one which 
calls doAirport) isn't providing a proper set of inputs to create the 
mdf data frame.  Hence dim(mdf) returns something bad and lblx doesn't 
exist.




<quote>
In my main R program, I have

source("retaanalysis/Functions/doAirport.R") .... stuff to read data and 
calculate ads sapply(ads, function(x) {doAirport(x, base)} )

And doAirport has

# analyze the flights for a given airport doAirport = function(df, base) {

# Get rid of unused runway factor levels (from other airports)
     df$lrw <- drop.levels(df$lrw) # In gdata package
# Drop messages from after the landing time
     df = df[df$PredTime >= 0.0,]
     airport = as.character(df[1,"Dest"])
#print it out

     airport
     date = strptime(df[1,"on"], format="%Y-%m-%d")     rwys = 
factor(unique(df$lrw), ordered=TRUE) # Get the names of the runways

     rwys = as.vector(rwys)
     nrwys = length(rwys)
# Make a data frame with the correct index for the runway
     rdf = data.frame(lrw=rwys, rwyidx=seq(1:nrwys))     df = merge(df, 
rdf, all.x=TRUE)

#colours <- c(RF = "brown", AF =383, PH="red",PF = "black",
#BA = "green", FI = "blue", FF = 56, PS = "magenta", TC=94)
     colours <- c("0"="red","1"="black",
     "2"="green", "3"="blue","4"="magenta","5"="orange")
     shapes <- c(RF = "R", AF = "f", PH="H", PF = "P",
     BA = "B", FI = "I", FF = "F", PS = "S", TC="T")

#Plot individual flight data

     dfm = df
     dfm = dfm[!df$MsgType=="AS",] # Eliminate AS messages 
dfm$MsgType=drop.levels(dfm$MsgType)     dfm = 
dfm[as.numeric(dfm$PredTime) < 60.0,]     dfm$tc= 
as.factor(floor(dfm$PredTime/10.0)) # get 10-minute bin 
dfm$flightfact = drop.levels(dfm$flightfact)     row.names(dfm) = 
seq(1:dim(dfm)[1])

#Find max and min error for each flight
     library(zoo)
     maxes = tapply(dfm$dt,dfm$flightfact,FUN=max) # Returns a list 
mins = tapply(dfm$dt,dfm$flightfact,FUN=min)     mdf = 
data.frame(flight=index(maxes), maxes=as.numeric(maxes),

         mins=as.numeric(mins))
# Add a column for colors

     mdf$clr = as.factor((mdf$flight - 1) %% 5)     mc = 
c("red","cyan","green","blue","magenta","black")
# Plot these

     outfile = paste(base, airport, "/", airport, "ErrorRange", date, 
".pdf", sep="")

     pdf(file=outfile, width=14, height=7, par(lwd=.5))
# Get only ones that span 0

     lblx = dim(mdf)[1]/2
....
}

And if I manually set
df = ads[[j]]
doAirport runs OK.

But when called from the main program, I always get > sapply(ads, 
function(x) {doAirport(df, base)} ) Error in eval(expr, envir, enclos) : 
object 'lblx' not found In addition: Warning message:
'mode(onefile)' differs between new and previous

      ==> NOT changing 'onefile'
 > sapply(ads, function(x) {doAirport(x, base)} ) Error in eval(expr, 
envir, enclos) : object 'lblx' not found In addition: Warning message:
'mode(onefile)' differs between new and previous

      ==> NOT changing 'onefile'

What am I doing wrong?

Thanks,
Jim

E-mail: jamesrome_at_gmail.com
URL: http://jamesrome.net
-- 
-----
Sent from my Cray XK6



More information about the R-help mailing list