All,

I think there may be some misunderstanding about my problem. In my code,
which is written as an R function, all of my variable names are short. I get
that error when I try to source the function so I can call it. I just do not
know why I'm getting the error, especially since I have written other very
similar functions that all work.

So I have chosen to post the code below. I welcome any ideas about where in
this code the error is occurring.

##########################################################
###  SCRIPT: graph_hh_wealth_function.R
###  DATE: April 22, 2010
###  AUTHOR: Brian Frizzelle
###                                 
###  This function draws two line graphs of household-level wealth from a
variable 
###  in a dataset output from an agent-based model run.
###
###  The two graphs are:
###     1)      a line graph showing change in Wealth over time for each 
individual
###             household
###   2)        a line graph of summary statistics of Wealth for the households
(min,
###             max, mean, and error bars)
###
###  Required Arguments:
###   * inpath -        The path to the directory containing the village-level
statistics
###                     file
###             NOTE: Use the UNIX forward slash (/) convention when entering 
the path
###                     and do not include a slash at the end of the path.
###                     OK:             "D:/data"
###                     Not OK:         "D:\data"
###                     Not OK:         "D:/data/"
###     * infile -      The name of the village-level statistics file
###     * outpath -     The path to the directory where you want the output 
graphics
to
###                     be saved
###     * outpref - The prefix that you want for the output PNG graphics files
###             NOTE: Do not include underscores (_) or spaces in the output 
prefix.
###                     Instead, please use dashes (-). Your prefix will be 
separated
###                     from the remainder of the file names by a dash.
###
###  Optional Arguments:
###     * log.plot - Logical. Default is FALSE.
###                     If TRUE, then the individual household wealth graph is 
plotted
###                     with a logarithmic Y-axis.
###                     If FALSE, then the individual household wealth graph is 
plotted
###                     with a standard Y-axis.
###     * err.bar -     Logical. Default is TRUE.
###                     If TRUE, then error bars of 1 standard deviation will 
be drawn
###                     around the mean.
###                     If FALSE, then no error bars will be drawn.
###     * n.quantiles - Integer. Value between 3 and 10. Default is 0, meaning
no
###                     quantile lines will be drawn.
###                     This is the number of bins into which you would like 
the variable
###                     separated. One line for each will be drawn, with the 
exception of
###                     the min and max, which are already drawn.
##########################################################

graph.hh.wealth <- function(inpath, infile, outpath, outpref,
log.plot=FALSE, 
                                    err.bar=TRUE, n.quantiles=0)

{

        ##*************************************************
        ## Set the path and name of the input file
        ##  - The 'paste' command concatenates the two
        ##  - The 'skiplines' var sets the number of lines
        ##      to skip when reading in the dataset.
        ##*************************************************
        if (substr(inpath, nchar(inpath), nchar(inpath)) == "/")
                inpath <- substr(inpath, 0, nchar(inpath)-1)
        if (substr(outpath, nchar(outpath), nchar(outpath)) == "/")
                outpath <- substr(outpath, 0, nchar(outpath)-1)
        pathfile <- paste(inpath, infile, sep="/")
        skiplines <- 1

        ##*************************************************
        ## Set the names of the output file graphics
        ##*************************************************
        fnout.wlth <- "hhwealth.png"
        fnout.wlthss <- "hhwealth-sumstats.png"
        output.png.wlth <- paste(outpath, "/", outpref, fnout.wlth, sep="")
        output.png.wlthss <- paste(outpath, "/", outpref, fnout.wlthss, sep="")

        ##*************************************************
        ## Read in the household-level output dataset
        ##*************************************************
        hhstats <- read.delim(file=pathfile, header=TRUE, sep ="\t", dec=".",
skip=skiplines)

        ##*************************************************
        ## Get some information from the household-level
        ## dataset for use in plotting.
        ##  - the village number
        ##  - a vector of the unique HH IDs
        ##  - the maximum number of model run years
        ##  - the maximum wealth among all households
        ##*************************************************
        villnum <- mean(hhstats$V84ID)
        uniq.hh.ids <- unique(hhstats$HHID00)
        max.yr <- max(hhstats$Year)
        max.wlth <- max(hhstats$Wealth)

        ##*************************************************
        ## Extract out the vars needed for the individual
        ## household line graph
        ## Vars: Year, HHID00, Wealth, Status
        ##*************************************************
        hh.wealth <- hhstats[,c("Year","HHID00","Wealth","Status")]
        hh.wealth.pos <- hh.wealth[hh.wealth$Wealth >= 0,]
        hh.wealth.plot <- hh.wealth.pos[hh.wealth.pos$Status == 0 |
hh.wealth.pos$Status == 1,]

        ##*************************************************
        ## Get the summary statistics by year for Wealth
        ##*************************************************
        ## Get a list of unique years for iterating
        unqyrlist <- unique(hh.wealth.plot$Year)

        ## Determine the divisor for the quantiles
        div.q <- 1.0 / n.quantiles

        ## Loop through years to extract summary statistics
        for (yr in min(unqyrlist):max(unqyrlist)) {
                # Get records for current year
                this.yr <- hh.wealth.plot[hh.wealth.plot$Year == yr,]
                # Calc summary statistics by statistic
                this.n <- dim(this.yr)[1]
                this.min <- min(this.yr$Wealth)
                this.max <- max(this.yr$Wealth)
                this.mean <- mean(this.yr$Wealth)
                this.med <- median(this.yr$Wealth)
                this.sd <- sd(this.yr$Wealth)
                this.ebneg <- this.mean-this.sd
                this.ebpos <- this.mean+this.sd
                this.sumstats <- c(yr, this.n, this.min, this.max, this.mean, 
                                        this.med, this.sd, this.ebneg, 
this.ebpos)
                # Convert vector to 1-row data frame
                this.df <- as.data.frame(t(as.matrix(this.sumstats)))
                colnames(this.df) <- c("Year", "Count", "Min", "Max", "Mean", 
"Median", 
                                                "SD", "EB.Low", "EB.High")
                # Now, calculate the specified quantiles for this year
                names(yr) <- "Year"
                this.q <- as.data.frame(t(as.matrix(c( 
                                quantile(this.yr$Wealth, probs=seq(0, 1, 
div.q)), yr))))
                # Append the data frame to the output data frame
                if (yr == min(unqyrlist)) {
                        hh.wealth.plot.ss <- this.df
                        hh.wealth.quantiles <- this.q
                } else {
                        hh.wealth.plot.ss <- 
rbind.data.frame(hh.wealth.plot.ss, this.df)
                        hh.wealth.quantiles <- 
rbind.data.frame(hh.wealth.quantiles, this.q)
                }
        }

        ##*************************************************
        ## Set up parameters for quantile plots
        ##*************************************************
        q.names <- c("", "", "Terciles", "Quantiles", "Quintiles",
                        "Sextiles", "Septiles", "Octiles", "Noniles", "Deciles")
        q.labs <- c("1st", "2nd", "3rd", "4th", "5th", "6th", "7th", "8th", 
"9th")
        # Determine if median will be plotted
        if (n.quantiles %% 2) plot.med <- FALSE else plot.med <- TRUE
        # Determine which non-median quantile columns will be plotted
        if (n.quantiles %% 2) {                 # If the number of quantiles is 
odd
                cols.q <- c(2:n.quantiles)
        } else {                                        # If the number of 
quantiles is even
                cols.q <- c(2:(n.quantiles/2), (2+(n.quantiles/2)):n.quantiles)
                col.med <- (n.quantiles/2) + 1
}

        ##*************************************************
        ## Set up plotting parameters for the summary
        ## statistics graph
        ##*************************************************
        # Set y axis limits
        ylim.min <- min(hh.wealth.plot.ss)
        ylim.max <- max(hh.wealth.plot.ss)
        # Set title
        ttl.ss <- paste("Summary Statistics of Household Wealth Change Over 
Time\n
(Village", 
                villnum, ")", sep="")
        # Set legend based on arguments
        leg.txt.ss <- c("Mean", "Min", "Max", "Error Bars", "# of HHs")
        if (err.bars == TRUE & n.quantiles == 0) {
                leg.txt.ss <- c("Mean", "Min", "Max", "Error Bars", "# of HHs")
                leg.lty.ss <- c(1,2,4,5,0)
                leg.lwd.ss <- c(2,1,1,1,0)
                leg.pch.ss <- c(-1,-1,-1,-1,16)
                leg.col.ss <- 
c("black","darkolivegreen4","chartreuse4","red","blue")
        } else if (err.bars == FALSE & n.quantiles >= 3) {
                if (n.quantiles %% 2) {                         # Odd number of 
quantiles
                        leg.txt.ss <- c("Mean", "Min", "Max", 
q.names[n.quantiles], "# of HHs")
                        leg.lty.ss <- c(1,2,4,3,0)
                        leg.lwd.ss <- c(2,1,1,1,0)
                        leg.pch.ss <- c(-1,-1,-1,-1,16)
                        leg.col.ss <- 
c("black","darkolivegreen4","chartreuse4","orange","blue")
                } else {                                                # Even 
number of quantiles
                        leg.txt.ss <- c("Mean", "Min", "Max", "Median", 
q.names[n.quantiles], 
                                                "# of HHs")
                        leg.lty.ss <- c(1,2,4,3,3,0)
                        leg.lwd.ss <- c(2,1,1,2,1,0)
                        leg.pch.ss <- c(-1,-1,-1,-1,-1,16)
                        leg.col.ss <- c("black", "darkolivegreen4", 
"chartreuse4", "orange", 
                                                "orange", "blue")
                }
        } else if (err.bars == TRUE & n.quantiles >= 3) {
                if (n.quantiles %% 2) {                         # Odd number of 
quantiles
                        leg.txt.ss <- c("Mean", "Min", "Max", "Error Bars", 
q.names[n.quantiles], 
                                                "# of HHs")
                        leg.lty.ss <- c(1,2,4,5,3,0)
                        leg.lwd.ss <- c(2,1,1,1,1,0)
                        leg.pch.ss <- c(-1,-1,-1,-1,-1,16)
                        leg.col.ss <- c("black", "darkolivegreen4", 
"chartreuse4", "red",
"orange",
                                                "blue")
                } else {                                                # Even 
number of quantiles
                        leg.txt.ss <- c("Mean", "Min", "Max", "Error Bars", 
"Median", 
                                                q.names[n.quantiles], "# of 
HHs")
                        leg.lty.ss <- c(1,2,4,5,3,3,0)
                        leg.lwd.ss <- c(2,1,1,1,2,1,0)
                        leg.pch.ss <- c(-1,-1,-1,-1,-1,-1,16)
                        leg.col.ss <- c("black", "darkolivegreen4", 
"chartreuse4", "red",
"orange",
                                                "orange","blue")
                }
        } else {
                leg.txt.ss <- c("Mean", "Min", "Max", "# of HHs")
                leg.lty.ss <- c(1,2,4,0)
                leg.lwd.ss <- c(2,1,1,0)
                leg.pch.ss <- c(-1,-1,-1,16)
                leg.col.ss <- c("black", "darkolivegreen4", "chartreuse4", 
"blue")
        }


        ##*************************************************
        ## Set up vector of possible colors for the lines
        ##*************************************************
        colorset <- c(3:12, 26:62, 67:79, 81, 83:137, 139, 142:151)

        ##*************************************************
        ## Set up plotting parameters for the individual
        ## household graph
        ##*************************************************
        ## Create a vector of colors from the colorset
        ## above, one for every HHID00
        colors.id <- sample(colorset, length(uniq.hh.ids), replace=TRUE)
        ## Other parameters
        ttl.hh <- paste("Change in Household Wealth Over Time\n (Village", 
                villnum, ")", sep="")
        leg.txt.hh <- c("Old Households", "Split Households")

        ##*************************************************
        ## Plot household-level summary statistics
        ##*************************************************
        png(filename=output.png.wlthss, width=10, height=7, units="in", res=300)

        ## Set initial plot with mean
        plot(hh.wealth.plot.ss$Year,            # x var
                hh.wealth.plot.ss$Mean,         # y var (MEAN)
                type="l",                               # line graph
                xlim=c(0,max.yr),                       # x-axis limits
                ylim=c(ylim.min, ylim.max),     # y-axis limits
                lty=1,                          # solid line
                lwd=2,                          # line thickness
                xlab="",
                ylab="Wealth",                  # y-axis label
                main=ttl.ss)
        ## Add MIN
        lines(hh.wealth.plot.ss$Year,           # x var
                hh.wealth.plot.ss$Min,          # y var (MIN)
                type="l",                               # line graph
                col="darkolivegreen4",
                lty=2)
        ## Add MAX
        lines(hh.wealth.plot.ss$Year,           # x var
                hh.wealth.plot.ss$Max,          # y var (MAX)
                type="l",                               # line graph
                col="chartreuse4",
                lty=4)

`       ## Add ERROR BARS if Argument 'err.bars' is TRUE
        if (err.bars == TRUE) {
                ## Add LOW ERROR BAR
                lines(hh.wealth.plot.ss$Year,                   # x var
                        hh.wealth.plot.ss$EB.Low,               # y var (EB LOW)
                        type="l",                                       # line 
graph
                        col="red",
                        lty=3)
                ## Add HIGH ERROR BAR
                lines(hh.wealth.plot.ss$Year,                   # x var
                        hh.wealth.plot.ss$EB.High,              # y var (EB 
HIGH)
                        type="l",                                       # line 
graph
                        col="red",
                        lty=3)
        }
        ## Add QUANTILES if Argument 'n.quantiles' is >= 3
        if (n.quantiles >= 3) {
                # Cycle through column numbers and draw quantile lines
                for (qcol in 1:length(cols.q)) {
                        lines(hh.wealth.quantiles$Year, # Plot quantile lines
                                hh.wealth.quantiles[,cols.q[qcol]],
                                type="l",
                                col="orange",
                                lty=3)
                        }
                # Add MEDIAN line
                if (plot.med == TRUE) {
                        lines(hh.wealth.quantiles$Year, # Plot median
                                hh.wealth.quantiles[,col.med],
                                type="l",
                                col="orange",
                                lty=3,
                                lwd=2)
                }
        }
        ## Add COUNT
        points(hh.wealth.plot.ss$Year,  # x var
                hh.wealth.plot.ss$Count,        # y var (COUNT)
                type="p",                               # line graph
                pch=16,
                col="blue",
                cex=0.5)
        ## Add LEGEND
        legend(x="topright",
                leg.txt.ss,
                lty=leg.lty.ss,
                lwd=leg.lwd.ss,
                pch=leg.pch.ss,
                col=leg.col.ss,
                cex=1)

        dev.off()


        ##*************************************************
        ## Plot wealth for individual households
        ##*************************************************
        png(filename=output.png.wlth, width=10, height=7, units="in", res=300)

        ## Create an empty plot
        if (log.plot == FALSE) {
                plot(hh.wealth.plot$Year, hh.wealth.plot$Wealth,
                        type="n",
                        xlim=c(0,max.yr),
                        main=ttl.hh,
                        xlab="",
                        ylab="Wealth")
        } else {
                plot(hh.wealth.plot$Year, hh.wealth.plot$Wealth,
                        log="y",
                        type="n",
                        xlim=c(0,max.yr),
                        main=ttl.hh,
                        xlab="",
                        ylab="Wealth (log scale)")
        }

        #legend(x=leg.x.coord, y=leg.y.coord,   # Sets the location for the 
legend
        legend(x="topright",
                leg.txt.hh,                             # text in the legent
                col=c("red", "red"),                    # sets the line colors 
in the legend
                lty=c(1,3),                             # draws lines
                lwd=c(1,1),                             # sets line thickness
        #       bty="n",                                        # no border on 
the legend
                ncol=2,                                         # makes it a 
2-column legend
                cex=0.8)                                        # sets the 
legend text size

        ## Loop through IDs and add a line for each
        for (id in 1:length(uniq.hh.ids)) {
                ## Get the current HH ID
                this.id <- uniq.hh.ids[id]

                ## Extract the records for the current ID
                this.sub <- hh.wealth.plot[hh.wealth.plot$HHID00 == this.id,]

                if (dim(this.sub)[1] > 0) {

                        ## Set line type
                        if (mean(this.sub$Status) == 0) {
                                ltype <- 1
                        } else {
                                ltype <- 3
                        }

                        ## Add the line for this ID
                        lines(this.sub$Year, this.sub$Wealth,
                                type="l", 
                                col= colors.id[id],
                                lwd=1,
                                lty=ltype)
                }

        }

        dev.off()

}
-- 
View this message in context: 
http://r.789695.n4.nabble.com/error-variable-names-are-limited-to-256-bytes-when-sourcing-code-tp2231800p2232209.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help@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.

Reply via email to