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
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
Add the following to your script: options(error=utils::recover) (actually put it in you Startup script), then learn how to use the debugging in R. On the error, this should provide a trace of the stack so that we know where the error occurs. By learning how to use debug/browser, you will be able to see what the environment is at the point of the error, then maybe some assistance can be given. On Sat, Aug 27, 2011 at 4:34 PM, James Rome <jamesrome at gmail.com> wrote:> 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 > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Jim Holtman Data Munger Guru What is the problem that you are trying to solve?