For the beginners, I'm going to start with this script which is designed to illustrate three of the fundamentals of R:
- functions
- objects
- packages
It's an expansion of the script to draw a graph of a protein assay with ggplot:
Here is the script:
# First script for VizBi2016
# written to illustrate the Fundamentals of R
## first 'Fundamental' is ** functions **
# functions do things!
# you know it's a function because it contains brackets
# c() is a function - sometimes called combine
## second 'Fundamental' is ** objects **
# objects contain data
# we make them with functions
# example:
# using the c() function to create the object prot
# Protein Concentrations
prot <- c(0.000, 0.016, 0.031, 0.063, 0.125, 0.250, 0.500, 1.000,
0.000, 0.016, 0.031, 0.063, 0.125, 0.250, 0.500, 1.000)
# a function has arguments - always inside the brackets
# Absorbance from my protein assay
abs <- c(0.329, 0.352, 0.349, 0.379, 0.417, 0.491, 0.668, 0.956,
0.327, 0.341, 0.355, 0.383, 0.417, 0.446, 0.655, 0.905)
# these objects are called 'vectors' - key term
## now we are going ot play with some of these objects to
#Calculate the line using the linear model function lm()
line <- lm(abs~prot)
# creates another kind of object - a list
# multiple parts with different type of data in each part
# too look at the object type line
line
summary(line)
# access particular parts of the object line
# using the $ dollar sign
# Equation of a line y = mx + c
# In our case abs = slope * prot + intercept
# ukn.prot = (abs - intercept)/slope
int <- summary(line)$coefficients[1]
slope <- summary(line)$coefficients[2]
# now calculate some unknown protein concs from absorbances
# put the unknowns into a vector
abs.ukns <- c(0.554, 0.568, 0.705)
# rearrange the equation of the line to ukn.prot = (abs - intercept)/slope
prot.ukns <- (abs.ukns - int)/slope
# CONCEPT ALERT - functions work on a vector of numbers
## graphing
# quick graph using base R
plot(prot, abs)
abline(line)
## BUT there is a better way!!
## third 'Fundamental' is ** packages **
# these are collections of functions that have been written by others
# these can be installed
# install.packages("ggplot2")
# and then activated
library(ggplot2)
# Convert from one type of object to another
# another kind of object is a data.frame
# a bit like an Excel spreadsheet
# often when we import data we get a data frame
data <- as.data.frame(prot)
data$abs <- abs
# make a simple graph with ggplot
# step one - add the data and then the 'aesthetics'
# key asthetics in this case x and y
p <- ggplot(data=data, # specify the data frame with data
aes(x=prot, y=abs)) # specify x and y for the graph
# creates a list and a blank plot
# add a type of graph
p <- p + geom_point()
# show the graph
p
# add a line
p + stat_smooth(method = "lm")
# more detailed plot:
p <- ggplot(data=data, # specify the data frame with data
aes(x=prot, y=abs)) + # specify x and y for the graph
geom_point() + # make a scatter plot
stat_smooth(method = "lm") + # add a linear model line
xlab("[Protein] (microg/ml)") + # label x-axis
ylab("Absorbance (570nm)") + # label y-axis
ggtitle("Protein Assay") + # add a title
theme_bw() + # a simple theme
expand_limits(y=c(0,1)) + # customise the y-axis
annotate(geom="text", x=0.85, y= 0.6, label="Abs Prot", color="red")
# put the answers on the graph
for (i in 1:length(abs.ukns)){
p <- p + annotate(geom="text", x = 0.8, y = (0.6 - i/20), label=abs.ukns[i])
p <- p + annotate(geom="text", x = 0.92, y = (0.6 - i/20), label=round(prot.ukns[i], 3))
}
p # show us the graph...
## To Learn from this script:
# run this script line by line yourself and see what happens.
# watch what happens
# make the plot object again and try some things...
p <- ggplot(data=data, # specify the data frame with data
aes(x=prot, y=abs)) # specify x and y for the graph
# try to change the colour of the points
p + geom_point(colour = "blue")
# try to change the size of the points
p + geom_point(size = 5, colour = "red")
# look at the documentation for geom_point
# http://docs.ggplot2.org/current/geom_point.html
# try some of the functions and see if you can make sense of them
No comments:
Post a Comment
Comments and suggestions are welcome.