R : Copyright 2003, The R Development Core Team Version 1.8.0 (2003-10-08) Patch:internationalization. R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for a HTML browser interface to help. Type 'q()' to quit R. > dat <- read.delim("stsample.txt") > cat("mean=",mean(dat$HT[dat$SEX=='M']),"sd=",sd(dat$HT[dat$SEX=='M']),"\n") mean= 174.8 sd= 8.58487 > cmeansd <- function(X,C) { + cat("mean=",mean(X[C]),"sd=",sd(X[C]),"\n") } > cmeansd(dat$HT,dat$SEX=='M') mean= 174.8 sd= 8.58487 > cmeansd(dat$HT,dat$SEX=='F') mean= 162 sd= 4.301163 > cmeansd.noprint <- function(X,C) { + list(mean=mean(X[C]),sd=sd(X[C])) } > print(cmeansd.noprint(dat$HT,dat$SEX=='M')) $mean [1] 174.8 $sd [1] 8.58487 > cmeansd <- function(X,C) { + cat("N=",length(X[C]),"\t mean=",mean(X[C]),"\t sd=",sd(X[C]),"\n") } > cmeansd(dat$HT,dat$AGE>=40) N= 8 mean= 169.75 sd= 10.02497 > cmeansd(dat$HT,(((dat$AGE>=40)&(dat$SEX=='M'))|((dat$AGE<30)&(dat$SEX=='F')))) N= 5 mean= 174.8 sd= 8.58487 > overforty <- (dat$AGE>=40) > cmeansd(dat$HT,overforty) N= 8 mean= 169.75 sd= 10.02497 > cmeansd(dat$HT,!overforty) N= 2 mean= 163 sd= 1.414214 > meansd <- function(X) { list(mean=mean(X),sd=sd(X)) } > tapply(dat$HT,dat$SEX,meansd) $F $F$mean [1] 162 $F$sd [1] 4.301163 $M $M$mean [1] 174.8 $M$sd [1] 8.58487 > by(dat$HT,dat$SEX,meansd) INDICES: F $mean [1] 162 $sd [1] 4.301163 ------------------------------------------------------------ INDICES: M $mean [1] 174.8 $sd [1] 8.58487 >