- 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)
- 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"
- 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 ...
- 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)
- Write a function to calculate ‘10!’, i.e., 10 factorial (1098…1). 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=