Re: [R] (Newbie) Functions on vectors

From: Prof Brian Ripley <ripley_at_stats.ox.ac.uk>
Date: Sat 18 Feb 2006 - 07:39:26 EST

Something like

Qs <- c("30/6", "30/9", "31/12", "31/3") paste(Qs[quarter], year + (quarter==4), sep="")

(no trailing semicolons are necessary)

On Fri, 17 Feb 2006, Vivek Satsangi wrote:

> Folks,
>
> I want to make the following function more efficient, by vectorizing it:
>
> getCriterionDecisionDate <- function (quarter , year)
> {
> if (length(quarter) != length(year)) stop ("Quarter and year vectors
> of unequal length!");
> ret <- character(0);
>
> for (i in 1:length(quarter)) {
> currQuarter <- quarter[i];
> currYear <- year[i];
>
> if ((currQuarter < 1) | (currQuarter > 4)) stop ("Invalid quarter!");
> if ((currYear < 1986) | (currYear > 2004)) stop ("Invalid year!");
>
> # If the criterion date is 1Q2004, then the reports were for periods
> # ending in Feb, March and April 2004 and the decision date is July 1, 2004.
> if (currQuarter == 1) {
> ret <- c(ret,paste("06/30/",currYear,sep=""));
> } else if (currQuarter == 2) {
> ret <- c(ret,paste("09/30/",currYear,sep=""));
> } else if (currQuarter == 3) {
> ret <- c(ret,paste("12/31/",currYear,sep=""));
> } else if (currQuarter == 4) {
> ret <- c(ret,paste("3/31/",currYear+1,sep=""));
> }
> }
>
> ret;
> }
>
>
> How can I make the 'if' statements work on vectors rather than using
> one value at a time? (sorry, my copy of MASS is at home).
>
> --
> -- Vivek Satsangi
> Student, Rochester, NY USA
>
> ______________________________________________
> R-help@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
>

```--
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help