---------------------------------------------------
# #
# Chapter 1: Compact Introduction #
# to the R-Software #
# #
---------------------------------------------------
R-homepage:
https://cran.r-project.org/
The symbol # is the comment-symbol in R, all code
after the #-symbol is ignored.
# There are 4 basic data types in R: vectors,
# matrices, data frames and lists. Numbers are
# vectors of lengths 1:
x = 7.7
y = 8.8
x+y
# There are basically 3 commands to generate vectors
# in R: c(), seq() and rep()
v1 = c(2.22,-4.56,29) # "c" for "concatenate"
v1
v2 = seq(from=10,to=30,by=2)
v2
v3 = seq(from=0,to=2*pi,length=100)
v3
plot(sin(v3)) # R always calculates element-wise
plot(sin(v3),type="l")
points(cos(v3)) # add points to an existing plot
lines(cos(v3),col="red") # same as points, just of line-type
?plot # help-pages
v4 = rep(2,10)
v4
v5 = rep(c(77,33),4)
v5
# for vectors mit step size 1 or -1:
v6 = 1:10
v6
v7 = 10:30 # increment is always 1 (or -1)
v7
v8 = 4:(-4)
v8
v8[1]
v8[2]
v8[7:9]
v8[7:11]
# many R-function automatically generate vectors as their
# result:
x = rnorm(10000) # 10000 standard-normal random numbers
x
plot(x)
hist(x)
hist(x,prob=TRUE)
curve(dnorm(x),col="red",add=TRUE)
# R is pretty performant and offers lots of functionality
# for calculations with random numbers; for every
# probability distribution dist there are the 4 functions
#
# rdist (generates random numbers)
# ddist (the prob-density)
# pdist (integral over the density)
# qdist (inverse of pdist)
# Matrices:
x = 1:20
x
mat1 = matrix(x,nrow=4,ncol=5)
mat1
mat2 = matrix(x,nrow=5,ncol=4)
mat2
mat3 = matrix(x,nrow=5,ncol=4,byrow=TRUE)
mat3
mat3[2,4]
mat3[4:5,2]
mat3[4:5,2:3]
# R typically calculates element-wise:
x
x^2
x+0.33
1/x
mat3
mat3^2 # this is not matrix-multiplication
mat3+0.77
1/mat3 # this is not the inverse of a matrix
# Matrix-Multiplication:
mat4 = mat1 %*% mat2
mat4
det(mat4) # not invertible
v1=c(1,1,1)
v2=c(1,2,3)
v3=c(1,4,9)
mat5 = rbind(v1,v2,v3) # "rowbind"
mat5
det(mat5)
mat5inv = solve(mat5) # this is matrix-inverse
mat5inv
# check:
mat5 %*% mat5inv
zapsmall(mat5 %*% mat5inv)
# Eigenvalues und Eigenvectors of a Matrix:
n = 5 # we repeat this for n=1000
x = rnorm(n*n) # n^2 random numbers
x
mat = matrix(x,nrow=n,ncol=n) # nxn random matrix
mat
eigen(mat)
res = eigen(mat)
str(res)
names(res)
# the result of eigen(mat) is a list with 2 elements,
# res[[1]]=res$values is of type vector and
# res[[2]]=res$vectors is of type matrix.
# the main use of lists is to collect objects of different
# data types into one single object. Often the return type
# of R-functions is of type list, since these functions
# provide various typs of information. For example, the
# return type of the function lm() ("lm" for "linear model")
# which performs a linear regression, is a list with 13
# elements.
res[[1]]
res$values
res[[2]]
res$vectors
n = 1000
# redo above, starting with code-line x = rnorm(n*n)
# -> quite fast calculation of eigenvectors and values
plot(res$values) # eigenvalues seem to be equally distributed
# in a cicle with radius, probably, sqrt(n)
# let's draw this circle and add to the plot of eigenvalues above:
phi = seq(from=0,to=2*pi,length=101)
r = sqrt(n)
z = r*exp(1i*phi) # 1i is R-Syntax for complex i=sqrt(-1)
points(z,col="red",type="l")
# apparently R is able to compute with complex numbers:
z = 0.5 + sqrt(3)/2 *1i
z
Re(z)
Im(z)
abs(z)
arg(z)
Arg(z) # R is case-sensitive
Arg(z)/pi # 60 degrees
# Besides vectors, matrices and lists there is the data type
# data frame. Typically, if some external data are imported
# to R, they are stored in a data frame.
# More on this in chapter2.