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.

vic <- c(5,NA,sin(5), -3); vic
[1]  5.0000000         NA -0.9589243 -3.0000000
scalar <- ifelse(vic>0, vic^2, 'No Thank You'); scalar
[1] "25"           NA             "No Thank You"
[4] "No Thank You"
bos <- c(1,2,34,4,2,2,5,5,3)
varry <- c(1,2,3,4,5)
match(bos,varry)
[1]  1  2 NA  4  2  2  5  5  3
match(varry, bos)
[1] 1 2 9 4 7
# while loop
kk<-0
while (kk<10){
  if (kk%%3==0) print(kk)
  kk <- kk+1 # can't do kk++. kk+=1 
}
[1] 0
[1] 3
[1] 6
[1] 9
# matrices
mm <- rbind(c(1,2,0),c(3,-5,4),c(0,1,1)); mm
     [,1] [,2] [,3]
[1,]    1    2    0
[2,]    3   -5    4
[3,]    0    1    1
# similarly
m2 <- cbind(c(1,2,0),c(3,-5,4),c(0,1,1)); m2
     [,1] [,2] [,3]
[1,]    1    3    0
[2,]    2   -5    1
[3,]    0    4    1
m3 <- cbind(mm,m2); m3
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    0    1    3    0
[2,]    3   -5    4    2   -5    1
[3,]    0    1    1    0    4    1
m3[1,5]
[1] 3
seq(35)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17
[18] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
[35] 35
xm <- matrix(seq(35), nrow=5); xm  # fills by columns
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    1    6   11   16   21   26   31
[2,]    2    7   12   17   22   27   32
[3,]    3    8   13   18   23   28   33
[4,]    4    9   14   19   24   29   34
[5,]    5   10   15   20   25   30   35
xm2 <- matrix(seq(35), nrow=5, byrow=TRUE); xm2 # now fills by rows
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    1    2    3    4    5    6    7
[2,]    8    9   10   11   12   13   14
[3,]   15   16   17   18   19   20   21
[4,]   22   23   24   25   26   27   28
[5,]   29   30   31   32   33   34   35
xm2 <- matrix(seq(35), nrow=4, byrow=TRUE); xm2
Warning in matrix(seq(35), nrow = 4, byrow = TRUE) :
  data length [35] is not a sub-multiple or multiple of the number of rows [4]
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,]    1    2    3    4    5    6    7    8    9
[2,]   10   11   12   13   14   15   16   17   18
[3,]   19   20   21   22   23   24   25   26   27
[4,]   28   29   30   31   32   33   34   35    1
ym <- seq(35)
dim(ym)<-c(7,5); ym # note fills by columns
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    8   15   22   29
[2,]    2    9   16   23   30
[3,]    3   10   17   24   31
[4,]    4   11   18   25   32
[5,]    5   12   19   26   33
[6,]    6   13   20   27   34
[7,]    7   14   21   28   35
dim(ym)
[1] 7 5
# can convert dataframe to matrix
iris[1:5,1:4]
bb <- as.matrix(iris[1:5,1:4]); bb # but keeps columns and indices
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1          5.1         3.5          1.4         0.2
2          4.9         3.0          1.4         0.2
3          4.7         3.2          1.3         0.2
4          4.6         3.1          1.5         0.2
5          5.0         3.6          1.4         0.2
bb^3
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1      132.651      42.875        2.744       0.008
2      117.649      27.000        2.744       0.008
3      103.823      32.768        2.197       0.008
4       97.336      29.791        3.375       0.008
5      125.000      46.656        2.744       0.008
bb[bb>1.3]
 [1] 5.1 4.9 4.7 4.6 5.0 3.5 3.0 3.2 3.1 3.6 1.4 1.4 1.5
[14] 1.4
rowSums(bb)
   1    2    3    4    5 
10.2  9.5  9.4  9.4 10.2 
bb
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1          5.1         3.5          1.4         0.2
2          4.9         3.0          1.4         0.2
3          4.7         3.2          1.3         0.2
4          4.6         3.1          1.5         0.2
5          5.0         3.6          1.4         0.2
apply(bb,2,median) # 2 means columnwise
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
         4.9          3.2          1.4          0.2 
# input and output with csv files
write.csv(bb,file='bb.csv')
write.csv(bb,file='bb_noIndices.csv', row.names = FALSE)
# can't delete the column names
# can't write to xlsx files directly, but you can use a package
library(openxlsx)
# need to use dataframes, not matrices
write.xlsx(iris, 'irisDF.xlsx',sheetName="FirstOne", overwrite=TRUE)
write.xlsx(iris, 'irisDF2.xlsx',sheetName="FirstOne", rowNames=FALSE, colNames=FALSE, overwrite=TRUE) #deletes headers and indices

snorkle <- read.csv(file='bb_noIndices.csv');snorkle
snorkle2 <- read.xlsx('irisDF.xlsx');snorkle2
# defining functions

lucas <- function(x,y){
  if (x>y) {
    a <- 'Howdy'
  } else {
    a <- 'Foody'
  }
  print(sprintf("%s doody",a))
  return(x>y)
}
lucas(3,3.5)
[1] "Foody doody"
[1] FALSE
lucas(3,-3.5)
[1] "Howdy doody"
[1] TRUE
lucas(c(1,2,7,4),c(10,-4,5,8)) # applies to vectors as well
Warning in if (x > y) { :
  the condition has length > 1 and only the first element will be used
[1] "Foody doody"
[1] FALSE  TRUE  TRUE FALSE
# piping
library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
# %>% means stick what is left into (the first slot of) the right side
1.5 %>% tan()
[1] 14.10142
1.5 %>%
  tan() %>%
  round(2)
[1] 14.1
round(tan(1.5),2)
[1] 14.1
# piping with data frames 
iris
irisB <- iris %>%
  subset(Sepal.Length>5.1)
irisB
irisC <- iris %>%
  subset(Sepal.Length>5.1) %>%
  aggregate(. ~ Species, .,mean) # dot means --- this is where you plug the previous thing in
irisC
NA

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).

The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike Knit, Preview does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ21kK1NoaWZ0K0VudGVyKi4gCgpgYGB7cn0KdmljIDwtIGMoNSxOQSxzaW4oNSksIC0zKTsgdmljCnNjYWxhciA8LSBpZmVsc2UodmljPjAsIHZpY14yLCAnTm8gVGhhbmsgWW91Jyk7IHNjYWxhcgpgYGAKCgpgYGB7cn0KYm9zIDwtIGMoMSwyLDM0LDQsMiwyLDUsNSwzKQp2YXJyeSA8LSBjKDEsMiwzLDQsNSkKbWF0Y2goYm9zLHZhcnJ5KQptYXRjaCh2YXJyeSwgYm9zKQpgYGAKCgpgYGB7cn0KIyB3aGlsZSBsb29wCmtrPC0wCndoaWxlIChrazwxMCl7CiAgaWYgKGtrJSUzPT0wKSBwcmludChraykKICBrayA8LSBraysxICMgY2FuJ3QgZG8ga2srKy4ga2srPTEgCn0KYGBgCgpgYGB7cn0KIyBtYXRyaWNlcwptbSA8LSByYmluZChjKDEsMiwwKSxjKDMsLTUsNCksYygwLDEsMSkpOyBtbQojIHNpbWlsYXJseQptMiA8LSBjYmluZChjKDEsMiwwKSxjKDMsLTUsNCksYygwLDEsMSkpOyBtMgptMyA8LSBjYmluZChtbSxtMik7IG0zCm0zWzEsNV0KYGBgCgoKYGBge3J9CnNlcSgzNSkKeG0gPC0gbWF0cml4KHNlcSgzNSksIG5yb3c9NSk7IHhtICAjIGZpbGxzIGJ5IGNvbHVtbnMKeG0yIDwtIG1hdHJpeChzZXEoMzUpLCBucm93PTUsIGJ5cm93PVRSVUUpOyB4bTIgIyBub3cgZmlsbHMgYnkgcm93cwp4bTIgPC0gbWF0cml4KHNlcSgzNSksIG5yb3c9NCwgYnlyb3c9VFJVRSk7IHhtMgp5bSA8LSBzZXEoMzUpCmRpbSh5bSk8LWMoNyw1KTsgeW0gIyBub3RlIGZpbGxzIGJ5IGNvbHVtbnMKZGltKHltKQpgYGAKCgpgYGB7cn0KIyBjYW4gY29udmVydCBkYXRhZnJhbWUgdG8gbWF0cml4CmlyaXNbMTo1LDE6NF0KYmIgPC0gYXMubWF0cml4KGlyaXNbMTo1LDE6NF0pOyBiYiAjIGJ1dCBrZWVwcyBjb2x1bW5zIGFuZCBpbmRpY2VzCmJiXjMKYmJbYmI+MS4zXQpyb3dTdW1zKGJiKQpiYgphcHBseShiYiwyLG1lZGlhbikgIyAyIG1lYW5zIGNvbHVtbndpc2UKYGBgCgpgYGB7cn0KIyBpbnB1dCBhbmQgb3V0cHV0IHdpdGggY3N2IGZpbGVzCndyaXRlLmNzdihiYixmaWxlPSdiYi5jc3YnKQp3cml0ZS5jc3YoYmIsZmlsZT0nYmJfbm9JbmRpY2VzLmNzdicsIHJvdy5uYW1lcyA9IEZBTFNFKQojIGNhbid0IGRlbGV0ZSB0aGUgY29sdW1uIG5hbWVzCiMgY2FuJ3Qgd3JpdGUgdG8geGxzeCBmaWxlcyBkaXJlY3RseSwgYnV0IHlvdSBjYW4gdXNlIGEgcGFja2FnZQpsaWJyYXJ5KG9wZW54bHN4KQojIG5lZWQgdG8gdXNlIGRhdGFmcmFtZXMsIG5vdCBtYXRyaWNlcwp3cml0ZS54bHN4KGlyaXMsICdpcmlzREYueGxzeCcsc2hlZXROYW1lPSJGaXJzdE9uZSIsIG92ZXJ3cml0ZT1UUlVFKQp3cml0ZS54bHN4KGlyaXMsICdpcmlzREYyLnhsc3gnLHNoZWV0TmFtZT0iRmlyc3RPbmUiLCByb3dOYW1lcz1GQUxTRSwgY29sTmFtZXM9RkFMU0UsIG92ZXJ3cml0ZT1UUlVFKSAjZGVsZXRlcyBoZWFkZXJzIGFuZCBpbmRpY2VzCgpzbm9ya2xlIDwtIHJlYWQuY3N2KGZpbGU9J2JiX25vSW5kaWNlcy5jc3YnKTtzbm9ya2xlCnNub3JrbGUyIDwtIHJlYWQueGxzeCgnaXJpc0RGLnhsc3gnKTtzbm9ya2xlMgpgYGAKCmBgYHtyfQojIGRlZmluaW5nIGZ1bmN0aW9ucwoKbHVjYXMgPC0gZnVuY3Rpb24oeCx5KXsKICBpZiAoeD55KSB7CiAgICBhIDwtICdIb3dkeScKICB9IGVsc2UgewogICAgYSA8LSAnRm9vZHknCiAgfQogIHByaW50KHNwcmludGYoIiVzIGRvb2R5IixhKSkKICByZXR1cm4oeD55KQp9Cmx1Y2FzKDMsMy41KQpsdWNhcygzLC0zLjUpCmx1Y2FzKGMoMSwyLDcsNCksYygxMCwtNCw1LDgpKSAjIGFwcGxpZXMgdG8gdmVjdG9ycyBhcyB3ZWxsCmBgYAoKCmBgYHtyfQojIHBpcGluZwpsaWJyYXJ5KGRwbHlyKQojICU+JSBtZWFucyBzdGljayB3aGF0IGlzIGxlZnQgaW50byAodGhlIGZpcnN0IHNsb3Qgb2YpIHRoZSByaWdodCBzaWRlCjEuNSAlPiUgdGFuKCkKMS41ICU+JQogIHRhbigpICU+JQogIHJvdW5kKDIpCnJvdW5kKHRhbigxLjUpLDIpCgpgYGAKCgpgYGB7cn0KIyBwaXBpbmcgd2l0aCBkYXRhIGZyYW1lcyAKaXJpcwppcmlzQiA8LSBpcmlzICU+JQogIHN1YnNldChTZXBhbC5MZW5ndGg+NS4xKQppcmlzQgppcmlzQyA8LSBpcmlzICU+JQogIHN1YnNldChTZXBhbC5MZW5ndGg+NS4xKSAlPiUKICBhZ2dyZWdhdGUoLiB+IFNwZWNpZXMsIC4sbWVhbikgIyBkb3QgbWVhbnMgLS0tIHRoaXMgaXMgd2hlcmUgeW91IHBsdWcgdGhlIHByZXZpb3VzIHRoaW5nIGluCmlyaXNDCgpgYGAKCgpBZGQgYSBuZXcgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpJbnNlcnQgQ2h1bmsqIGJ1dHRvbiBvbiB0aGUgdG9vbGJhciBvciBieSBwcmVzc2luZyAqQ21kK09wdGlvbitJKi4KCldoZW4geW91IHNhdmUgdGhlIG5vdGVib29rLCBhbiBIVE1MIGZpbGUgY29udGFpbmluZyB0aGUgY29kZSBhbmQgb3V0cHV0IHdpbGwgYmUgc2F2ZWQgYWxvbmdzaWRlIGl0IChjbGljayB0aGUgKlByZXZpZXcqIGJ1dHRvbiBvciBwcmVzcyAqQ21kK1NoaWZ0K0sqIHRvIHByZXZpZXcgdGhlIEhUTUwgZmlsZSkuIAoKVGhlIHByZXZpZXcgc2hvd3MgeW91IGEgcmVuZGVyZWQgSFRNTCBjb3B5IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yLiBDb25zZXF1ZW50bHksIHVubGlrZSAqS25pdCosICpQcmV2aWV3KiBkb2VzIG5vdCBydW4gYW55IFIgY29kZSBjaHVua3MuIEluc3RlYWQsIHRoZSBvdXRwdXQgb2YgdGhlIGNodW5rIHdoZW4gaXQgd2FzIGxhc3QgcnVuIGluIHRoZSBlZGl0b3IgaXMgZGlzcGxheWVkLgoK