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
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=