[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