1. Read in the weight data that is posted on webpage as ‘Weight data’.
wtData<-read.table("http://www.uvm.edu/~bbeckage/Teaching/DataAnalysis/Data/wts.txt",header=TRUE)
head(wtData)
  1. What type of object is the file read in as? If it is not a data frame, coerce it to one.
class(wtData)
[1] "data.frame"
  1. What are object/data types of each of the columns?
str(wtData)
'data.frame':   15 obs. of  3 variables:
 $ gender    : Factor w/ 2 levels "f","m": 2 2 2 1 1 2 1 1 1 1 ...
 $ height_in : int  72 67 68 64 66 69 68 63 65 69 ...
 $ weight_lbs: int  165 160 160 114 135 148 120 138 135 150 ...
  1. Plot weight (on y axis) vs height (on x axis) with different colored symbols for each gender.
plot(wtData[wtData$gender=='f',]$height_in, wtData[wtData$gender=='f',]$weight_lbs,
     col="red",xlim=range(wtData$height_in),ylim=range(wtData$weight_lbs), ylab="Wt",xlab="Ht")
points(wtData[wtData$gender=='m',]$height_in,wtData[wtData$gender=='m',]$weight_lbs,col="blue",pch=2)

library(lattice)
xyplot(height_in~weight_lbs|gender,data=wtData)

detach("package:lattice", unload=TRUE)
library(ggplot2)
qplot(height_in, weight_lbs, data = wtData, colour = gender)

detach("package:ggplot2",unload=TRUE)
library(ggplot2)
a<-ggplot(wtData, aes(x=height_in, y=weight_lbs))
a + geom_point(aes(color=factor(gender)))

  
detach("package:ggplot2",unload=TRUE)
  1. Write a function to calculate ‘10!’, i.e., 10 factorial (10981). Show the result for 10 and 20.
myFactorial<-function(x){
  if(identical(x,0)) return(1)
  myProd<-1 
  for(i in x:1){ # this causes the index i to vary from 1 to 10
    myProd<-myProd*i
    cat(paste("i= ",i,"; myProd= ",myProd,sep=""),fill=T) 
    # print(myProd)
  }
  return(myProd)
  # cat(paste("index= ",i,"; myProd= ",myProd,sep=""),fill=T) 
}
myFactorial(0)
[1] 1
myFactorial(1)
i= 1; myProd= 1
[1] 1
myFactorial(3)
i= 3; myProd= 3
i= 2; myProd= 6
i= 1; myProd= 6
[1] 6
myFactorial(4)
i= 4; myProd= 4
i= 3; myProd= 12
i= 2; myProd= 24
i= 1; myProd= 24
[1] 24
myFactorial(3)
Called from: myFactorial(3)
i
[1] 3
myProd
[1] 3
Q
myFactorial2<-function(x){
  if(identical(x,0)) return(1)
  return(tail(cumprod(1:x),1))
}
myFactorial2(0)
[1] 1
myFactorial2(1)
[1] 1
myFactorial2(3)
[1] 6
myFactorial2(4)
[1] 24
myFactorial3<-function(x){
  if(identical(x,0)) return(1)
  return(x * myFactorial3(x-1))
}
myFactorial3(0)
[1] 1
myFactorial3(1)
[1] 1
myFactorial3(3)
[1] 6
myFactorial3(4)
[1] 24

Timing the functions:

library(microbenchmark)
microbenchmark(myFactorial(10))
Unit: nanoseconds
            expr min   lq     mean median     uq     max neval
 myFactorial(10) 991 1015 32739.34 1066.5 1094.5 3167358   100
microbenchmark(myFactorial2(10))
Unit: microseconds
             expr   min    lq     mean median     uq    max neval
 myFactorial2(10) 8.943 9.266 10.09731 9.4625 9.6465 62.448   100
microbenchmark(myFactorial3(10))
Unit: microseconds
             expr   min     lq    mean median     uq    max neval
 myFactorial3(10) 6.117 6.4255 6.69957  6.584 6.7385 17.854   100
detach("package:microbenchmark",unload=TRUE)

This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Cmd+Shift+Enter.

plot(cars)

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Cmd+Option+I.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Cmd+Shift+K to preview the HTML file).

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6IGRlZmF1bHQKICBodG1sX25vdGVib29rOiBkZWZhdWx0Ci0tLQoKIDEuIFJlYWQgaW4gdGhlIHdlaWdodCBkYXRhIHRoYXQgaXMgcG9zdGVkIG9uIHdlYnBhZ2UgYXMg4oCYV2VpZ2h0IGRhdGHigJkuCgpgYGB7cn0KCnd0RGF0YTwtcmVhZC50YWJsZSgiaHR0cDovL3d3dy51dm0uZWR1L35iYmVja2FnZS9UZWFjaGluZy9EYXRhQW5hbHlzaXMvRGF0YS93dHMudHh0IixoZWFkZXI9VFJVRSkKCmhlYWQod3REYXRhKQoKYGBgCgogMi4gV2hhdCB0eXBlIG9mIG9iamVjdCBpcyB0aGUgZmlsZSByZWFkIGluIGFzPyBJZiBpdCBpcyBub3QgYSBkYXRhIGZyYW1lLCBjb2VyY2UgaXQgdG8gb25lLgogCiAKYGBge3J9CmNsYXNzKHd0RGF0YSkKCmBgYAoKCjMuIFdoYXQgYXJlIG9iamVjdC9kYXRhIHR5cGVzIG9mIGVhY2ggb2YgdGhlIGNvbHVtbnM/CgpgYGB7cn0Kc3RyKHd0RGF0YSkKCmBgYAoKCgo0LiBQbG90IHdlaWdodCAob24geSBheGlzKSB2cyBoZWlnaHQgKG9uIHggYXhpcykgd2l0aCBkaWZmZXJlbnQgY29sb3JlZCBzeW1ib2xzIGZvciBlYWNoIGdlbmRlci4KCmBgYHtyfQoKcGxvdCh3dERhdGFbd3REYXRhJGdlbmRlcj09J2YnLF0kaGVpZ2h0X2luLCB3dERhdGFbd3REYXRhJGdlbmRlcj09J2YnLF0kd2VpZ2h0X2xicywKICAgICBjb2w9InJlZCIseGxpbT1yYW5nZSh3dERhdGEkaGVpZ2h0X2luKSx5bGltPXJhbmdlKHd0RGF0YSR3ZWlnaHRfbGJzKSwgeWxhYj0iV3QiLHhsYWI9Ikh0IikKcG9pbnRzKHd0RGF0YVt3dERhdGEkZ2VuZGVyPT0nbScsXSRoZWlnaHRfaW4sd3REYXRhW3d0RGF0YSRnZW5kZXI9PSdtJyxdJHdlaWdodF9sYnMsY29sPSJibHVlIixwY2g9MikKCmBgYAoKCmBgYHtyfQoKbGlicmFyeShsYXR0aWNlKQp4eXBsb3QoaGVpZ2h0X2lufndlaWdodF9sYnN8Z2VuZGVyLGRhdGE9d3REYXRhKQpkZXRhY2goInBhY2thZ2U6bGF0dGljZSIsIHVubG9hZD1UUlVFKQoKYGBgCgoKCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCnFwbG90KGhlaWdodF9pbiwgd2VpZ2h0X2xicywgZGF0YSA9IHd0RGF0YSwgY29sb3VyID0gZ2VuZGVyKQpkZXRhY2goInBhY2thZ2U6Z2dwbG90MiIsdW5sb2FkPVRSVUUpCgpgYGAKCmBgYHtyfQoKbGlicmFyeShnZ3Bsb3QyKQphPC1nZ3Bsb3Qod3REYXRhLCBhZXMoeD1oZWlnaHRfaW4sIHk9d2VpZ2h0X2xicykpCmEgKyBnZW9tX3BvaW50KGFlcyhjb2xvcj1mYWN0b3IoZ2VuZGVyKSkpCiAgCmRldGFjaCgicGFja2FnZTpnZ3Bsb3QyIix1bmxvYWQ9VFJVRSkKCmBgYAoKCjUuIFdyaXRlIGEgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIOKAmDEwIeKAmSwgaS5lLiwgMTAgZmFjdG9yaWFsICgxMCo5KjgqLi4uKjEpLiBTaG93IHRoZSByZXN1bHQgZm9yIDEwIGFuZCAyMC4KCmBgYHtyfQoKbXlGYWN0b3JpYWw8LWZ1bmN0aW9uKHgpewogIGlmKGlkZW50aWNhbCh4LDApKSByZXR1cm4oMSkKICBteVByb2Q8LTEgCiAgZm9yKGkgaW4geDoxKXsgIyB0aGlzIGNhdXNlcyB0aGUgaW5kZXggaSB0byB2YXJ5IGZyb20gMSB0byAxMAogICAgbXlQcm9kPC1teVByb2QqaQogICAgIyBjYXQocGFzdGUoImk9ICIsaSwiOyBteVByb2Q9ICIsbXlQcm9kLHNlcD0iIiksZmlsbD1UKSAKICAgICMgcHJpbnQobXlQcm9kKQogICAgIyBicm93c2VyKCkKICB9CiAgcmV0dXJuKG15UHJvZCkKICAjIGNhdChwYXN0ZSgiaW5kZXg9ICIsaSwiOyBteVByb2Q9ICIsbXlQcm9kLHNlcD0iIiksZmlsbD1UKSAKfQoKbXlGYWN0b3JpYWwoMCkKbXlGYWN0b3JpYWwoMSkKbXlGYWN0b3JpYWwoMykKbXlGYWN0b3JpYWwoNCkKCmBgYAoKYGBge3J9Cm15RmFjdG9yaWFsKDMpCmBgYAoKCmBgYHtyfQoKbXlGYWN0b3JpYWwyPC1mdW5jdGlvbih4KXsKICBpZihpZGVudGljYWwoeCwwKSkgcmV0dXJuKDEpCiAgcmV0dXJuKHRhaWwoY3VtcHJvZCgxOngpLDEpKQp9CgpteUZhY3RvcmlhbDIoMCkKbXlGYWN0b3JpYWwyKDEpCm15RmFjdG9yaWFsMigzKQpteUZhY3RvcmlhbDIoNCkKCmBgYAoKCmBgYHtyfQoKbXlGYWN0b3JpYWwzPC1mdW5jdGlvbih4KXsKICBpZihpZGVudGljYWwoeCwwKSkgcmV0dXJuKDEpCiAgcmV0dXJuKHggKiBteUZhY3RvcmlhbDMoeC0xKSkKfQoKbXlGYWN0b3JpYWwzKDApCm15RmFjdG9yaWFsMygxKQpteUZhY3RvcmlhbDMoMykKbXlGYWN0b3JpYWwzKDQpCgpgYGAKClRpbWluZyB0aGUgZnVuY3Rpb25zOgoKYGBge3J9CmxpYnJhcnkobWljcm9iZW5jaG1hcmspCgptaWNyb2JlbmNobWFyayhteUZhY3RvcmlhbCgxMCkpCgptaWNyb2JlbmNobWFyayhteUZhY3RvcmlhbDIoMTApKQoKbWljcm9iZW5jaG1hcmsobXlGYWN0b3JpYWwzKDEwKSkKCmRldGFjaCgicGFja2FnZTptaWNyb2JlbmNobWFyayIsdW5sb2FkPVRSVUUpCgpgYGAKCgpUaGlzIGlzIGFuIFtSIE1hcmtkb3duXShodHRwOi8vcm1hcmtkb3duLnJzdHVkaW8uY29tKSBOb3RlYm9vay4gV2hlbiB5b3UgZXhlY3V0ZSBjb2RlIHdpdGhpbiB0aGUgbm90ZWJvb2ssIHRoZSByZXN1bHRzIGFwcGVhciBiZW5lYXRoIHRoZSBjb2RlLiAKClRyeSBleGVjdXRpbmcgdGhpcyBjaHVuayBieSBjbGlja2luZyB0aGUgKlJ1biogYnV0dG9uIHdpdGhpbiB0aGUgY2h1bmsgb3IgYnkgcGxhY2luZyB5b3VyIGN1cnNvciBpbnNpZGUgaXQgYW5kIHByZXNzaW5nICpDbWQrU2hpZnQrRW50ZXIqLiAKCmBgYHtyfQpwbG90KGNhcnMpCmBgYAoKQWRkIGEgbmV3IGNodW5rIGJ5IGNsaWNraW5nIHRoZSAqSW5zZXJ0IENodW5rKiBidXR0b24gb24gdGhlIHRvb2xiYXIgb3IgYnkgcHJlc3NpbmcgKkNtZCtPcHRpb24rSSouCgpXaGVuIHlvdSBzYXZlIHRoZSBub3RlYm9vaywgYW4gSFRNTCBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvZGUgYW5kIG91dHB1dCB3aWxsIGJlIHNhdmVkIGFsb25nc2lkZSBpdCAoY2xpY2sgdGhlICpQcmV2aWV3KiBidXR0b24gb3IgcHJlc3MgKkNtZCtTaGlmdCtLKiB0byBwcmV2aWV3IHRoZSBIVE1MIGZpbGUpLgo=