Writing our own functions in R

Writing a function to get two random numbers when rolling a dice. Then sum it up

# Setting optional values in function
roll<-function(x=1:6){
  dice=sample(x,size=2,replace = T)
  sumup=sum(dice)
  return(sumup)
}

roll()
[1] 8
# Without optional setting 

my_math<-function(x,y,z){
  total=x+y+z
  final=total*22
  return(final)
}

my_math(2,3,4)
[1] 198
# Setting one or more optional values
sumup<-0 # Initialize the variable sumup to store calculated values 
my_math<-function(x,y,z=3){
  for (i in 1:10){
    sumup[i]<-x+y+z
    }
  return (sum(sumup))
}
my_math(1,1)
[1] 50

Calculate the slot machine

slot_machine<-function(){
  wheel<-c("A","B","7","BB","BBB","C")
  sample(wheel,size = 3, prob = c(0.01,0.06,0.01,0.5,0.02,0.4))
}

slot_machine()
[1] "BB" "C"  "B" 

Using all function

#%in% 

a<-c("Ha Van")

all(c("Ha Van") %in% a)
[1] TRUE

Using expand.grid to form any combinations

# Chooseing 2 randomly numbers from dice 

dice<-c(1:6)

com<-expand.grid(dice,dice)# 36 combinations 

# Calculating the value of each roll

com$value<-com$Var1+com$Var2

com
NA

If and else if

a<-10

if (a>10){
  print("a>10")
} else if(a<11){
  print("a<11")
}else {
  print("Others")
}
[1] "a<11"
a<-1:10

con<-ifelse(a>5,"More","Less")
con
 [1] "Less" "Less" "Less" "Less" "Less" "More" "More" "More" "More" "More"

Cat function

# Create a list
mylist<-list("Ha Van Tuyen",46,"Vinh Phuc")
# Cat 
myfun<-function(x){
  cat("Name:",x[[1]],"\n")
  cat("Age:",x[[2]],"\n")
  cat("Address:",x[[3]],"\n")
}

myfun(mylist)
Name: Ha Van Tuyen 
Age: 46 
Address: Vinh Phuc 

Creating boxplot using soci-economic dataset

library(GISTools)
package 㤼㸱GISTools㤼㸲 was built under R version 3.6.3Loading required package: maptools
package 㤼㸱maptools㤼㸲 was built under R version 3.6.3Checking rgeos availability: TRUE
Loading required package: RColorBrewer
Loading required package: MASS
Loading required package: rgeos
package 㤼㸱rgeos㤼㸲 was built under R version 3.6.3rgeos version: 0.5-2, (SVN revision 621)
 GEOS runtime version: 3.6.1-CAPI-1.10.1 
 Linking to sp version: 1.4-1 
 Polygon checking: TRUE 
library(ggplot2)

df<-data.frame(georgia)

# Converting PctRural to Rural (PctRural>50) and Non-Rural 
for (i in 1:nrow(df)){
  if (df$PctRural[i]>50){
    df$Place[i]<-"Rural"
  }else{
    df$Place[i]<-"Non-Rural"
  }
}
head(df)  
# Converting Income into three groups 

for (i in 1:nrow(df)){
  if(df$MedInc[i]<29773){
    df$Income[i]<-"Poor"
  }else if (df$MedInc[i]>=29773 &df$MedInc[i]<=41204){
    df$Income[i]<-"Average"
  }else {
    df$Income[i]<-"Rich"
  }
}

head(df)

Histogram Plot

ggplot(df, aes(x=MedInc)) + 
  geom_histogram(aes(y=..density..),
                 binwidth=5000,colour="white") +
  geom_density(alpha=.4, fill="darksalmon") +
  # Ignore NA values for mean
  geom_vline(aes(xintercept=median(MedInc, na.rm=T)),
             color="red", linetype="dashed", size=1)

Boxplot

ggplot(df, aes(Income, PctBach, fill = factor(Place))) + 
  geom_boxplot() +
  scale_fill_manual(name = "Rural",
                    values = c("orange", "firebrick3"),
                    labels = c("Non-Rural"="Not Rural","Rural"="Rural")) +
  xlab("Income Class") +
  ylab("% Bachelors")

Boplot continued

indice<-read.csv("https://raw.githubusercontent.com/tuyenhavan/Rice-Paper/master/Indice_Value.csv",header = T)
head(indice)

ggplot(indice, aes(Class, Value, fill = factor(Type))) +  geom_boxplot() + 
  scale_fill_manual(name = "Land Use",values = c("orange", "green"),labels = c("Rice"="Rice","Non-rice"="Non-rice")) +
  xlab("Class") + ylab("Indices Values") + theme_bw() + theme(axis.title.x = element_text(size = 14,face="bold"),axis.title.y = element_text(size=14,face="bold"))

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIFdyaXRpbmcgb3VyIG93biBmdW5jdGlvbnMgaW4gUg0KDQpXcml0aW5nIGEgZnVuY3Rpb24gdG8gZ2V0IHR3byByYW5kb20gbnVtYmVycyB3aGVuIHJvbGxpbmcgYSBkaWNlLiBUaGVuIHN1bSBpdCB1cA0KDQpgYGB7cn0NCiMgU2V0dGluZyBvcHRpb25hbCB2YWx1ZXMgaW4gZnVuY3Rpb24NCnJvbGw8LWZ1bmN0aW9uKHg9MTo2KXsNCiAgZGljZT1zYW1wbGUoeCxzaXplPTIscmVwbGFjZSA9IFQpDQogIHN1bXVwPXN1bShkaWNlKQ0KICByZXR1cm4oc3VtdXApDQp9DQoNCnJvbGwoKQ0KIyBXaXRob3V0IG9wdGlvbmFsIHNldHRpbmcgDQoNCm15X21hdGg8LWZ1bmN0aW9uKHgseSx6KXsNCiAgdG90YWw9eCt5K3oNCiAgZmluYWw9dG90YWwqMjINCiAgcmV0dXJuKGZpbmFsKQ0KfQ0KDQpteV9tYXRoKDIsMyw0KQ0KDQojIFNldHRpbmcgb25lIG9yIG1vcmUgb3B0aW9uYWwgdmFsdWVzDQpzdW11cDwtMCAjIEluaXRpYWxpemUgdGhlIHZhcmlhYmxlIHN1bXVwIHRvIHN0b3JlIGNhbGN1bGF0ZWQgdmFsdWVzIA0KbXlfbWF0aDwtZnVuY3Rpb24oeCx5LHo9Myl7DQogIGZvciAoaSBpbiAxOjEwKXsNCiAgICBzdW11cFtpXTwteCt5K3oNCiAgICB9DQogIHJldHVybiAoc3VtKHN1bXVwKSkNCn0NCm15X21hdGgoMSwxKQ0KYGBgDQoNCiMgQ2FsY3VsYXRlIHRoZSBzbG90IG1hY2hpbmUNCg0KYGBge3J9DQpzbG90X21hY2hpbmU8LWZ1bmN0aW9uKCl7DQogIHdoZWVsPC1jKCJBIiwiQiIsIjciLCJCQiIsIkJCQiIsIkMiKQ0KICBzYW1wbGUod2hlZWwsc2l6ZSA9IDMsIHByb2IgPSBjKDAuMDEsMC4wNiwwLjAxLDAuNSwwLjAyLDAuNCkpDQp9DQoNCnNsb3RfbWFjaGluZSgpDQpgYGANCg0KIyBVc2luZyBhbGwgZnVuY3Rpb24NCg0KYGBge3J9DQojJWluJSANCg0KYTwtYygiSGEgVmFuIikNCg0KYWxsKGMoIkhhIFZhbiIpICVpbiUgYSkNCg0KYGBgDQoNCiMgVXNpbmcgYGV4cGFuZC5ncmlkYCB0byBmb3JtIGFueSBjb21iaW5hdGlvbnMgDQoNCmBgYHtyfQ0KIyBDaG9vc2VpbmcgMiByYW5kb21seSBudW1iZXJzIGZyb20gZGljZSANCg0KZGljZTwtYygxOjYpDQoNCmNvbTwtZXhwYW5kLmdyaWQoZGljZSxkaWNlKSMgMzYgY29tYmluYXRpb25zIA0KDQojIENhbGN1bGF0aW5nIHRoZSB2YWx1ZSBvZiBlYWNoIHJvbGwNCg0KY29tJHZhbHVlPC1jb20kVmFyMStjb20kVmFyMg0KDQpjb20NCg0KYGBgDQoNCiMgSWYgYW5kIGVsc2UgaWYgDQoNCmBgYHtyfQ0KYTwtMTANCg0KaWYgKGE+MTApew0KICBwcmludCgiYT4xMCIpDQp9IGVsc2UgaWYoYTwxMSl7DQogIHByaW50KCJhPDExIikNCn1lbHNlIHsNCiAgcHJpbnQoIk90aGVycyIpDQp9DQpgYGANCmBgYHtyfQ0KYTwtMToxMA0KDQpjb248LWlmZWxzZShhPjUsIk1vcmUiLCJMZXNzIikNCmNvbg0KYGBgDQoNCg0KDQoNCg0KDQojIENhdCBmdW5jdGlvbg0KDQpgYGB7cn0NCiMgQ3JlYXRlIGEgbGlzdA0KbXlsaXN0PC1saXN0KCJIYSBWYW4gVHV5ZW4iLDQ2LCJWaW5oIFBodWMiKQ0KIyBDYXQgDQpteWZ1bjwtZnVuY3Rpb24oeCl7DQogIGNhdCgiTmFtZToiLHhbWzFdXSwiXG4iKQ0KICBjYXQoIkFnZToiLHhbWzJdXSwiXG4iKQ0KICBjYXQoIkFkZHJlc3M6Iix4W1szXV0sIlxuIikNCn0NCg0KbXlmdW4obXlsaXN0KQ0KDQpgYGANCg0KIyBDcmVhdGluZyBib3hwbG90IHVzaW5nIHNvY2ktZWNvbm9taWMgZGF0YXNldA0KDQpgYGB7cn0NCmxpYnJhcnkoR0lTVG9vbHMpDQpsaWJyYXJ5KGdncGxvdDIpDQoNCmRmPC1kYXRhLmZyYW1lKGdlb3JnaWEpDQoNCiMgQ29udmVydGluZyBQY3RSdXJhbCB0byBSdXJhbCAoUGN0UnVyYWw+NTApIGFuZCBOb24tUnVyYWwgDQpmb3IgKGkgaW4gMTpucm93KGRmKSl7DQogIGlmIChkZiRQY3RSdXJhbFtpXT41MCl7DQogICAgZGYkUGxhY2VbaV08LSJSdXJhbCINCiAgfWVsc2V7DQogICAgZGYkUGxhY2VbaV08LSJOb24tUnVyYWwiDQogIH0NCn0NCmhlYWQoZGYpICANCiMgQ29udmVydGluZyBJbmNvbWUgaW50byB0aHJlZSBncm91cHMgDQoNCmZvciAoaSBpbiAxOm5yb3coZGYpKXsNCiAgaWYoZGYkTWVkSW5jW2ldPDI5NzczKXsNCiAgICBkZiRJbmNvbWVbaV08LSJQb29yIg0KICB9ZWxzZSBpZiAoZGYkTWVkSW5jW2ldPj0yOTc3MyAmZGYkTWVkSW5jW2ldPD00MTIwNCl7DQogICAgZGYkSW5jb21lW2ldPC0iQXZlcmFnZSINCiAgfWVsc2Ugew0KICAgIGRmJEluY29tZVtpXTwtIlJpY2giDQogIH0NCn0NCg0KaGVhZChkZikNCmBgYA0KIyBIaXN0b2dyYW0gUGxvdA0KDQpgYGB7cn0NCmdncGxvdChkZiwgYWVzKHg9TWVkSW5jKSkgKyANCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHk9Li5kZW5zaXR5Li4pLA0KICAgICAgICAgICAgICAgICBiaW53aWR0aD01MDAwLGNvbG91cj0id2hpdGUiKSArDQogIGdlb21fZGVuc2l0eShhbHBoYT0uNCwgZmlsbD0iZGFya3NhbG1vbiIpICsNCiAgIyBJZ25vcmUgTkEgdmFsdWVzIGZvciBtZWFuDQogIGdlb21fdmxpbmUoYWVzKHhpbnRlcmNlcHQ9bWVkaWFuKE1lZEluYywgbmEucm09VCkpLA0KICAgICAgICAgICAgIGNvbG9yPSJyZWQiLCBsaW5ldHlwZT0iZGFzaGVkIiwgc2l6ZT0xKQ0KYGBgDQojIEJveHBsb3QgDQoNCmBgYHtyfQ0KZ2dwbG90KGRmLCBhZXMoSW5jb21lLCBQY3RCYWNoLCBmaWxsID0gZmFjdG9yKFBsYWNlKSkpICsgDQogIGdlb21fYm94cGxvdCgpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwobmFtZSA9ICJSdXJhbCIsDQogICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIm9yYW5nZSIsICJmaXJlYnJpY2szIiksDQogICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIk5vbi1SdXJhbCI9Ik5vdCBSdXJhbCIsIlJ1cmFsIj0iUnVyYWwiKSkgKw0KICB4bGFiKCJJbmNvbWUgQ2xhc3MiKSArDQogIHlsYWIoIiUgQmFjaGVsb3JzIikNCg0KYGBgDQojIEJvcGxvdCBjb250aW51ZWQgDQpgYGB7cn0NCmluZGljZTwtcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90dXllbmhhdmFuL1JpY2UtUGFwZXIvbWFzdGVyL0luZGljZV9WYWx1ZS5jc3YiLGhlYWRlciA9IFQpDQpoZWFkKGluZGljZSkNCg0KZ2dwbG90KGluZGljZSwgYWVzKENsYXNzLCBWYWx1ZSwgZmlsbCA9IGZhY3RvcihUeXBlKSkpICsgIGdlb21fYm94cGxvdCgpICsgDQogIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWUgPSAiTGFuZCBVc2UiLHZhbHVlcyA9IGMoIm9yYW5nZSIsICJncmVlbiIpLGxhYmVscyA9IGMoIlJpY2UiPSJSaWNlIiwiTm9uLXJpY2UiPSJOb24tcmljZSIpKSArDQogIHhsYWIoIkNsYXNzIikgKyB5bGFiKCJJbmRpY2VzIFZhbHVlcyIpICsgdGhlbWVfYncoKSArIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQsZmFjZT0iYm9sZCIpLGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplPTE0LGZhY2U9ImJvbGQiKSkNCmBgYA0KDQo=