[R] (Newbie) Functions on vectors

Patrick Burns pburns at pburns.seanet.com
Fri Feb 17 21:59:19 CET 2006


Vivek,

For the tests you can do, for example:

if(any(quarter < 1 | quarter > 4)) stop('invalid quarter(s)')

For the dates you can do:

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

Patrick Burns
patrick at burns-stat.com
+44 (0)20 8525 0696
http://www.burns-stat.com
(home of S Poetry and "A Guide for the Unwilling S User")

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 at stat.math.ethz.ch mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>
>
>
>  
>




More information about the R-help mailing list