I'm finally cleaning up old things / todo's; We had about half a dozen e-mails on R-devel back in mid March...... Here is my proposal, a sometimes useful utility for constructing strings in cat() or text(), legend(), etc.: ordinal <- function(i, language =3D "english", gender =3D c("female","male"), sep=3D"") { ii <- i if(!is.numeric(i) || any(i < 0) || any(ii !=3D (i <- as.integer(i)))) stop("'i' must be non-negative integer") ilang <- pmatch(language, c("english", "francais", "deutsch", "italiano", "espanol")) #, "portugues" ? if(is.na(ilang)) stop(paste("language '", language, "' not (yet) implemented.", sep=3D"")) ig <- pmatch(gender, c("female","male"))[1] if(is.na(ig)) stop(paste("gender '", gender, "' is invalid.", sep=3D"")) suffix <- switch(ilang, c("st","nd","rd","th")[pmin(4,ifelse(i<20,ifelse(i=3D=3D0,4,i), 1+(i-1)%%10))],# engl c(c("=E8re","er")[ig],"me")[1 + (i!=3D1)],# french ".",# german c("a","o")[ig], # italian c("a","o")[ig], # spanish ) paste(i, suffix, sep=3Dsep) } nn <- c(0:3,9:13,20:22,99:102) ------------------------------------------------------------------------------ -------------------- Test a few interesting cases ---------------- ------------------------------------------------------------------------------ -------------------- Is this correct/acceptable for the given languages? -------------------- -------------------- Additions, bugs, ``patches'' ?> ordinal(1:22)[1] "1st" "2nd" "3rd" "4th" "5th" "6th" "7th" "8th" "9th" "10th" [11] "11th" "12th" "13th" "14th" "15th" "16th" "17th" "18th" "19th" "20th" [21] "21st" "22nd"> ordinal(nn,"english")[1] "0th" "1st" "2nd" "3rd" "9th" "10th" "11th" "12th" "13th" [10] "20th" "21st" "22nd" "99th" "100th" "101st" "102nd"> ordinal(nn,"francais")[1] "0me" "1=E8re" "2me" "3me" "9me" "10me" "11me" "12me" "13me" [10] "20me" "21me" "22me" "99me" "100me" "101me" "102me"> ordinal(1:3,"fr","m")[1] "1er" "2me" "3me"> ordinal(nn, "italian")# Ladies first =3D> Ladies default...[1] "0a" "1a" "2a" "3a" "9a" "10a" "11a" "12a" "13a" "20a" [11] "21a" "22a" "99a" "100a" "101a" "102a"> ordinal(nn, "espan", "m")[1] "0o" "1o" "2o" "3o" "9o" "10o" "11o" "12o" "13o" "20o" [11] "21o" "22o" "99o" "100o" "101o" "102o"> > ordinal(nn, "deutsch", "m")[1] "0." "1." "2." "3." "9." "10." "11." "12." "13." "20." [11] "21." "22." "99." "100." "101." "102."> > ## These give an error > ordinal(pi)Error: 'i' must be non-negative integer Execution halted -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
Peter Dalgaard BSA
1998-Jul-01 17:32 UTC
ordinal(): [was "a handy function ..." in March..]
Martin Maechler <maechler@stat.math.ethz.ch> writes:> ilang <- pmatch(language, c("english", "francais", "deutsch", > "italiano", "espanol")) #, "portugues" ? > if(is.na(ilang)) > stop(paste("language '", language, "' not (yet) implemented.", sep=""))Danish is exactly like German in this respect... -- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk) FAX: (+45) 35327907 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._