I can't debug this because you haven't said what levels2weeklyret() does. However, I can offer a tip: use traceback() straight after the error to see exactly where it goes wrong. If still baffled, use debug() [takes a bit of learning].
To return multiple values, return a list (see ?return) or other multi-component structure. If I may offer another word of advice: don't use single letter variable names, especially l which is identical to 1 in many fonts, and don't use f or fn except for a function name. Also we are all supposed to use names like `eatFile` rather than the old-style `eat.file`, though R base itself is full of names.somethings and probably always will be. HTH > -----Original Message----- > From: Ajay Shah [mailto:[EMAIL PROTECTED] > Sent: 02 March 2004 18:00 > To: r-help > Subject: [R] Stuck in trying to convert repetitive code into > a function > > > Security Warning: > If you are not sure an attachment is safe to open contact > Andy on x234. > There are 0 attachments with this message. > ________________________________________________________________ > > Folks, > > I have the following repetitive code which works correctly: > > A = read.table(file="junior.csv", sep=",", > col.names=c("date", "l")); > A$date = chron(as.character(A$date), format="m/d/y"); > r.junior = levels2weeklyret(lastfriday, A$date, A$l); > plot(A$date, A$l, type="l", col="red", main="Junior levels") > z <- locator(1) > > A = read.table(file="kospi.csv", sep=",", > col.names=c("date", "l")); > A$date = chron(as.character(A$date), format="m/d/y"); > r.kospi = levels2weeklyret(lastfriday, A$date, A$l); > plot(A$date, A$l, type="l", col="red", main="Kospi levels") > z <- locator(1) > > I tried to write it more nicely as follows: > > eat.a.file <- function(fn, label, lastfriday) { > f = read.table(file=fn, sep=",", col.names=c("date", "l")); > f$date = chron(as.character(f$date), format="m/d/y"); > plot(f$date, f$l, type="l", col="red", main=label); > z <- locator(1); > return(levels2weeklyret(lastfriday, f$date, f$l)); > } > r.junior = eat.a.file(fn="junior.csv", label="Junior", lastfriday); > r.kospi = eat.a.file(fn="kospi.csv", label="Kospi", lastfriday); > > When I do this, I get this error at the first of the two > function calls: > > Error in vector("double", length) : negative length vectors > are not allowed > Execution halted > > I have tried hard to experiment with various ways of writing it, but > am truly stumped. Any ideas on what might be going wrong? I am new to > R and have only written a few functions so far. > > On a slightly related note, what is the situation in R on passing by > reference versus passing by value? I looked at the standard docs and > they seem to insist that a function can only send back one return > value. How does a function send back multiple things that it has > created? > > -- > Ajay Shah Consultant > [EMAIL PROTECTED] Department of Economic Affairs > http://www.mayin.org/ajayshah Ministry of Finance, New Delhi > > ______________________________________________ > [EMAIL PROTECTED] mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Simon Fear Senior Statistician Syne qua non Ltd Tel: +44 (0) 1379 644449 Fax: +44 (0) 1379 644445 email: [EMAIL PROTECTED] web: http://www.synequanon.com Number of attachments included with this message: 0 This message (and any associated files) is confidential and\...{{dropped}} ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html