1. Write R scripts using the selection flow control for each of the following.
  1. Determine the biggest number among three numbers.
num_list<-list()
num_list[1]<-as.integer(readline("Enter a number:"))
13
num_list[2]<-as.integer(readline("Enter a number:"))
2
num_list[3]<-as.integer(readline("Enter a number:"))
5
max_num <- num_list[1]
for (num in num_list){
  if (num > max_num){
    max_num<-num
  }
}
print(max_num)
[[1]]
[1] 13
  1. A switch statement that displays Sunday, Monday, …, Saturday, if the number is 0, 1, … 6.
num<-readline("Enter a number: ")
11
switch(num,
       "0"="Monday",
       "1"="Tuesday",
       "2"="Wednesday",
       "3"="Thursday",
       "4"="Friday",
       "5"="Saturday",
       "6"="Sunday",
       "Out of Bounds")
[1] "Out of Bounds"
  1. Determine whether the year is a leap year. A leap year is divisible by 4 but not by 100. A leap year is also divisible by 400.
isLeapYear<-function(year){
  if (year%%400==0 | (year%%4==0 & year%%100!=0)){
    return(TRUE)
  }
  return(FALSE)
}
year<-as.integer(readline("Enter a year: "))
1904
isLeapYear(year)
[1] TRUE
  1. Write R scripts using the ifelse() function for each of the following.
  1. Determine the positive and negative number in the vector.
nums <- sample(-10:10,5)
nums
[1] -4  0 10  1  4
for (num in nums){
  print(ifelse(num<0,"Negative","Positive"))
}
[1] "Negative"
[1] "Positive"
[1] "Positive"
[1] "Positive"
[1] "Positive"
  1. Determine whether a character in the vector is uppercase or lowercase letter.
letters=c("A","a","b","B")
for (letter in letters){
  print(ifelse(letter==toupper(letter),"Uppercase","Lowercase"))
}
[1] "Uppercase"
[1] "Lowercase"
[1] "Lowercase"
[1] "Uppercase"
  1. Compare the numbers from two vectors to determine whether a number is larger than, smaller than or equal to another number.
v1<-sample(1:10,2)
v2<-sample(1:10,2)
for (n1 in v1){
  for (n2 in v2){
    if (n1<n2){
      print(paste(n1," is smaller than ",n2))
    }else if (n1>n2){
      print(paste(n1," is greater than ",n2))
    }else{
      print(paste(n1," is equal to ",n2))
    }
  }
}
[1] "10  is equal to  10"
[1] "10  is greater than  4"
[1] "8  is smaller than  10"
[1] "8  is greater than  4"
  1. Create an R file named calculator.r that stimulates a simple calculator. It reads two numbers and an operator. If the operator is +, the sum is printed; if it is -, the difference is printed; if it is x, the multiplication is printed; if it is /, the quotient is printed.
nums<-readline("Enter two numbers: ")
11 14
nums<-strsplit(nums," ")
n1<-as.numeric(nums[[1]][1])
n2<-as.numeric(nums[[1]][2])
op<-readline("Enter operator: ")
*
switch(op,
       "+"=print(paste(n1,op,n2,"=",n1+n2)),
       "-"=print(paste(n1,op,n2,"=",n1-n2)),
       "*"=print(paste(n1,op,n2,"=",n1*n2)),
       "/"=print(paste(n1,op,n2,"=",n1/n2)),
       "Unsupported operator")
[1] "11 * 14 = 154"
  1. Create an R file named circle.r. The script will ask user to enter the radius of a circle and a coordinate point (x, y). Determine whether the point is inside or outside the circle centered at (0, 0).
calcDist<-function(x,y){
  return(sqrt(x**2+y**2))
}
r=readline("Enter the radius of the circle: ")
5
c=readline("Enter the coordinate x and y: ")
3 4
x=as.integer(strsplit(c," ")[[1]][1])
y=as.integer(strsplit(c," ")[[1]][2])
print(ifelse(calcDist(x,y)<=r,paste("(",x,",",y,") is in the circle"),paste("(",x,",",y,") is not in the circle")))
[1] "( 3 , 4 ) is in the circle"
  1. Write R statements using loop flow control for each of the following
  1. Find the largest integer n so that n3 is less than 2000.
n<-0
while((n+1)**3<2000) {
  n<-n+1
}
print(n)
[1] 12
  1. Compute the sum of the series: 1/25+2/24+3/23 … + 25/1 in two decimal places.
total=0
for (i in 1:25){
  total<-total+i/(26-i)
}
print(round(total,2))
[1] 74.21
  1. Display the first ten values of the Fibonacci sequence. Given the formula f1 = 1, f2 =1, fn = fn-1 + fn-2.
fib<-function(n){
  if (n<=2){return(1)}
  return(fib(n-1)+fib(n-2))
}
for (i in 1:10){print(paste(i,":",fib(i)))}
[1] "1 : 1"
[1] "2 : 1"
[1] "3 : 2"
[1] "4 : 3"
[1] "5 : 5"
[1] "6 : 8"
[1] "7 : 13"
[1] "8 : 21"
[1] "9 : 34"
[1] "10 : 55"
  1. Create an R file named score.r. The script will calculate the minimum, maximum, average and standard deviation (s) of the exam score in a subject. The program will accept the score and quit if negative score is entered.
num<-1
nums<-c()
while (num>0){
  num<-readline("Enter a score [negative score to quit]: ")
  if (num<0) break
  nums<-c(nums,as.integer(num))
}
2
3
4
-1

print(paste("Minimum score",min(nums)))
[1] "Minimum score 2"
print(paste("Maximum score",max(nums)))
[1] "Maximum score 4"
print(paste("Average score",mean(nums)))
[1] "Average score 3"
print(paste("Standard deviation",sd(nums)))
[1] "Standard deviation 1"
  1. Create an R file named matrix.r. The script will ask user to enter M and N. Create a matrix with M rows and N columns with random numbers 1-50. Display the matrix and then count the number of odd and even numbers in the matrix
size<-readline("Enter M and N: ")
2 5
M<-as.integer(strsplit(size," ")[[1]][1])
N<-as.integer(strsplit(size," ")[[1]][2])
df<-matrix(sample(1:50,M*N),M,N)
odd<-0
even<-0
for (i in 1:M){
  for (j in 1:N){
    print(df[i,j])
    if (df[i,j]%%2==0) {
      even<-even+1
    } else{
      odd <-odd+1
    }
  }
}
[1] 23
[1] 2
[1] 3
[1] 4
[1] 37
[1] 27
[1] 50
[1] 28
[1] 36
[1] 31
print(paste("Number of odd numbers in the matrix:",odd))
[1] "Number of odd numbers in the matrix: 5"
print(paste("Number of even numbers in the matrix:",even))
[1] "Number of even numbers in the matrix: 5"
LS0tDQp0aXRsZTogIkxhYiA0Ig0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KMS4gV3JpdGUgUiBzY3JpcHRzIHVzaW5nIHRoZSBzZWxlY3Rpb24gZmxvdyBjb250cm9sIGZvciBlYWNoIG9mIHRoZSBmb2xsb3dpbmcuDQphLiBEZXRlcm1pbmUgdGhlIGJpZ2dlc3QgbnVtYmVyIGFtb25nIHRocmVlIG51bWJlcnMuDQpgYGB7cn0NCm51bV9saXN0PC1saXN0KCkNCm51bV9saXN0WzFdPC1hcy5pbnRlZ2VyKHJlYWRsaW5lKCJFbnRlciBhIG51bWJlcjoiKSkNCm51bV9saXN0WzJdPC1hcy5pbnRlZ2VyKHJlYWRsaW5lKCJFbnRlciBhIG51bWJlcjoiKSkNCm51bV9saXN0WzNdPC1hcy5pbnRlZ2VyKHJlYWRsaW5lKCJFbnRlciBhIG51bWJlcjoiKSkNCm1heF9udW0gPC0gbnVtX2xpc3RbMV0NCmZvciAobnVtIGluIG51bV9saXN0KXsNCiAgaWYgKG51bSA+IG1heF9udW0pew0KICAgIG1heF9udW08LW51bQ0KICB9DQp9DQpwcmludChtYXhfbnVtKQ0KDQpgYGANCg0KYi4gQSBzd2l0Y2ggc3RhdGVtZW50IHRoYXQgZGlzcGxheXMgU3VuZGF5LCBNb25kYXksIOKApiwgU2F0dXJkYXksIGlmIHRoZSBudW1iZXIgaXMgMCwgMSwgLi4uIDYuDQpgYGB7cn0NCm51bTwtcmVhZGxpbmUoIkVudGVyIGEgbnVtYmVyOiAiKQ0Kc3dpdGNoKG51bSwNCiAgICAgICAiMCI9Ik1vbmRheSIsDQogICAgICAgIjEiPSJUdWVzZGF5IiwNCiAgICAgICAiMiI9IldlZG5lc2RheSIsDQogICAgICAgIjMiPSJUaHVyc2RheSIsDQogICAgICAgIjQiPSJGcmlkYXkiLA0KICAgICAgICI1Ij0iU2F0dXJkYXkiLA0KICAgICAgICI2Ij0iU3VuZGF5IiwNCiAgICAgICAiT3V0IG9mIEJvdW5kcyIpDQpgYGANCg0KYy4gRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHllYXIgaXMgYSBsZWFwIHllYXIuIEEgbGVhcCB5ZWFyIGlzIGRpdmlzaWJsZSBieSA0IGJ1dCBub3QgYnkgMTAwLiBBIGxlYXAgeWVhciBpcyBhbHNvIGRpdmlzaWJsZSBieSA0MDAuDQpgYGB7cn0NCmlzTGVhcFllYXI8LWZ1bmN0aW9uKHllYXIpew0KICBpZiAoeWVhciUlNDAwPT0wIHwgKHllYXIlJTQ9PTAgJiB5ZWFyJSUxMDAhPTApKXsNCiAgICByZXR1cm4oVFJVRSkNCiAgfQ0KICByZXR1cm4oRkFMU0UpDQp9DQp5ZWFyPC1hcy5pbnRlZ2VyKHJlYWRsaW5lKCJFbnRlciBhIHllYXI6ICIpKQ0KaXNMZWFwWWVhcih5ZWFyKQ0KDQpgYGANCg0KDQoyLiBXcml0ZSBSIHNjcmlwdHMgdXNpbmcgdGhlIGlmZWxzZSgpIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBmb2xsb3dpbmcuDQphLiBEZXRlcm1pbmUgdGhlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBudW1iZXIgaW4gdGhlIHZlY3Rvci4NCmBgYHtyfQ0KbnVtcyA8LSBzYW1wbGUoLTEwOjEwLDUpDQpudW1zDQpmb3IgKG51bSBpbiBudW1zKXsNCiAgcHJpbnQoaWZlbHNlKG51bTwwLCJOZWdhdGl2ZSIsIlBvc2l0aXZlIikpDQp9DQpgYGANCg0KYi4gRGV0ZXJtaW5lIHdoZXRoZXIgYSBjaGFyYWN0ZXIgaW4gdGhlIHZlY3RvciBpcyB1cHBlcmNhc2Ugb3IgbG93ZXJjYXNlIGxldHRlci4NCmBgYHtyfQ0KbGV0dGVycz1jKCJBIiwiYSIsImIiLCJCIikNCmZvciAobGV0dGVyIGluIGxldHRlcnMpew0KICBwcmludChpZmVsc2UobGV0dGVyPT10b3VwcGVyKGxldHRlciksIlVwcGVyY2FzZSIsIkxvd2VyY2FzZSIpKQ0KfQ0KYGBgDQoNCmMuIENvbXBhcmUgdGhlIG51bWJlcnMgZnJvbSB0d28gdmVjdG9ycyB0byBkZXRlcm1pbmUgd2hldGhlciBhIG51bWJlciBpcyBsYXJnZXIgdGhhbiwgc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIGFub3RoZXIgbnVtYmVyLg0KYGBge3J9DQp2MTwtc2FtcGxlKDE6MTAsMikNCnYyPC1zYW1wbGUoMToxMCwyKQ0KZm9yIChuMSBpbiB2MSl7DQogIGZvciAobjIgaW4gdjIpew0KICAgIGlmIChuMTxuMil7DQogICAgICBwcmludChwYXN0ZShuMSwiIGlzIHNtYWxsZXIgdGhhbiAiLG4yKSkNCiAgICB9ZWxzZSBpZiAobjE+bjIpew0KICAgICAgcHJpbnQocGFzdGUobjEsIiBpcyBncmVhdGVyIHRoYW4gIixuMikpDQogICAgfWVsc2V7DQogICAgICBwcmludChwYXN0ZShuMSwiIGlzIGVxdWFsIHRvICIsbjIpKQ0KICAgIH0NCiAgfQ0KfQ0KYGBgDQoNCg0KMy4gQ3JlYXRlIGFuIFIgZmlsZSBuYW1lZCBjYWxjdWxhdG9yLnIgdGhhdCBzdGltdWxhdGVzIGEgc2ltcGxlIGNhbGN1bGF0b3IuIEl0IHJlYWRzIHR3byBudW1iZXJzIGFuZCBhbiBvcGVyYXRvci4gSWYgdGhlIG9wZXJhdG9yIGlzICssIHRoZSBzdW0gaXMgcHJpbnRlZDsgaWYgaXQgaXMgLSwgdGhlIGRpZmZlcmVuY2UgaXMgcHJpbnRlZDsgaWYgaXQgaXMgeCwgdGhlIG11bHRpcGxpY2F0aW9uIGlzIHByaW50ZWQ7IGlmIGl0IGlzIC8sIHRoZSBxdW90aWVudCBpcyBwcmludGVkLg0KYGBge3J9DQpudW1zPC1yZWFkbGluZSgiRW50ZXIgdHdvIG51bWJlcnM6ICIpDQpudW1zPC1zdHJzcGxpdChudW1zLCIgIikNCm4xPC1hcy5udW1lcmljKG51bXNbWzFdXVsxXSkNCm4yPC1hcy5udW1lcmljKG51bXNbWzFdXVsyXSkNCm9wPC1yZWFkbGluZSgiRW50ZXIgb3BlcmF0b3I6ICIpDQpzd2l0Y2gob3AsDQogICAgICAgIisiPXByaW50KHBhc3RlKG4xLG9wLG4yLCI9IixuMStuMikpLA0KICAgICAgICItIj1wcmludChwYXN0ZShuMSxvcCxuMiwiPSIsbjEtbjIpKSwNCiAgICAgICAieCI9cHJpbnQocGFzdGUobjEsb3AsbjIsIj0iLG4xKm4yKSksDQogICAgICAgIi8iPXByaW50KHBhc3RlKG4xLG9wLG4yLCI9IixuMS9uMikpLA0KICAgICAgICJVbnN1cHBvcnRlZCBvcGVyYXRvciIpDQoNCmBgYA0KDQoNCjQuIENyZWF0ZSBhbiBSIGZpbGUgbmFtZWQgY2lyY2xlLnIuIFRoZSBzY3JpcHQgd2lsbCBhc2sgdXNlciB0byBlbnRlciB0aGUgcmFkaXVzIG9mIGEgY2lyY2xlIGFuZCBhIGNvb3JkaW5hdGUgcG9pbnQgKHgsIHkpLiBEZXRlcm1pbmUgd2hldGhlciB0aGUgcG9pbnQgaXMgaW5zaWRlIG9yIG91dHNpZGUgdGhlIGNpcmNsZSBjZW50ZXJlZCBhdCAoMCwgMCkuDQpgYGB7cn0NCmNhbGNEaXN0PC1mdW5jdGlvbih4LHkpew0KICByZXR1cm4oc3FydCh4KioyK3kqKjIpKQ0KfQ0Kcj1yZWFkbGluZSgiRW50ZXIgdGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlOiAiKQ0KYz1yZWFkbGluZSgiRW50ZXIgdGhlIGNvb3JkaW5hdGUgeCBhbmQgeTogIikNCng9YXMuaW50ZWdlcihzdHJzcGxpdChjLCIgIilbWzFdXVsxXSkNCnk9YXMuaW50ZWdlcihzdHJzcGxpdChjLCIgIilbWzFdXVsyXSkNCnByaW50KGlmZWxzZShjYWxjRGlzdCh4LHkpPD1yLHBhc3RlKCIoIix4LCIsIix5LCIpIGlzIGluIHRoZSBjaXJjbGUiKSxwYXN0ZSgiKCIseCwiLCIseSwiKSBpcyBub3QgaW4gdGhlIGNpcmNsZSIpKSkNCmBgYA0KDQo1LiBXcml0ZSBSIHN0YXRlbWVudHMgdXNpbmcgbG9vcCBmbG93IGNvbnRyb2wgZm9yIGVhY2ggb2YgdGhlIGZvbGxvd2luZw0KYS4gRmluZCB0aGUgbGFyZ2VzdCBpbnRlZ2VyIG4gc28gdGhhdCBuMyBpcyBsZXNzIHRoYW4gMjAwMC4NCmBgYHtyfQ0KbjwtMA0Kd2hpbGUoKG4rMSkqKjM8MjAwMCkgew0KICBuPC1uKzENCn0NCnByaW50KG4pDQpgYGANCg0KYi4gQ29tcHV0ZSB0aGUgc3VtIG9mIHRoZSBzZXJpZXM6IDEvMjUrMi8yNCszLzIzIOKApiArIDI1LzEgaW4gdHdvIGRlY2ltYWwgcGxhY2VzLg0KYGBge3J9DQp0b3RhbD0wDQpmb3IgKGkgaW4gMToyNSl7DQogIHRvdGFsPC10b3RhbCtpLygyNi1pKQ0KfQ0KcHJpbnQocm91bmQodG90YWwsMikpDQpgYGANCg0KYy4gRGlzcGxheSB0aGUgZmlyc3QgdGVuIHZhbHVlcyBvZiB0aGUgRmlib25hY2NpIHNlcXVlbmNlLiBHaXZlbiB0aGUgZm9ybXVsYSBmMSA9IDEsIGYyID0xLCBmbiA9IGZuLTEgKyBmbi0yLiANCmBgYHtyfQ0KZmliPC1mdW5jdGlvbihuKXsNCiAgaWYgKG48PTIpe3JldHVybigxKX0NCiAgcmV0dXJuKGZpYihuLTEpK2ZpYihuLTIpKQ0KfQ0KZm9yIChpIGluIDE6MTApe3ByaW50KHBhc3RlKGksIjoiLGZpYihpKSkpfQ0KDQpgYGANCg0KDQo2LiBDcmVhdGUgYW4gUiBmaWxlIG5hbWVkIHNjb3JlLnIuIFRoZSBzY3JpcHQgd2lsbCBjYWxjdWxhdGUgdGhlIG1pbmltdW0sIG1heGltdW0sIGF2ZXJhZ2UgYW5kIHN0YW5kYXJkIGRldmlhdGlvbiAocykgDQpvZiB0aGUgZXhhbSBzY29yZSBpbiBhIHN1YmplY3QuIFRoZSBwcm9ncmFtIHdpbGwgYWNjZXB0IHRoZSBzY29yZSBhbmQgcXVpdCBpZiBuZWdhdGl2ZSBzY29yZSBpcyBlbnRlcmVkLg0KYGBge3J9DQpudW08LTENCm51bXM8LWMoKQ0Kd2hpbGUgKG51bT4wKXsNCiAgbnVtPC1yZWFkbGluZSgiRW50ZXIgYSBzY29yZSBbbmVnYXRpdmUgc2NvcmUgdG8gcXVpdF06ICIpDQogIGlmIChudW08MCkgYnJlYWsNCiAgbnVtczwtYyhudW1zLGFzLmludGVnZXIobnVtKSkNCn0NCg0KcHJpbnQocGFzdGUoIk1pbmltdW0gc2NvcmUiLG1pbihudW1zKSkpDQpwcmludChwYXN0ZSgiTWF4aW11bSBzY29yZSIsbWF4KG51bXMpKSkNCnByaW50KHBhc3RlKCJBdmVyYWdlIHNjb3JlIixtZWFuKG51bXMpKSkNCnByaW50KHBhc3RlKCJTdGFuZGFyZCBkZXZpYXRpb24iLHNkKG51bXMpKSkNCg0KYGBgDQoNCg0KNy4gQ3JlYXRlIGFuIFIgZmlsZSBuYW1lZCBtYXRyaXguci4gVGhlIHNjcmlwdCB3aWxsIGFzayB1c2VyIHRvIGVudGVyIE0gYW5kIE4uIENyZWF0ZSBhIG1hdHJpeCB3aXRoIE0gcm93cyBhbmQgTiBjb2x1bW5zIHdpdGggcmFuZG9tIG51bWJlcnMgMS01MC4gRGlzcGxheSB0aGUgbWF0cml4IGFuZCB0aGVuIGNvdW50IHRoZSBudW1iZXIgb2Ygb2RkIGFuZCBldmVuIG51bWJlcnMgaW4gdGhlIG1hdHJpeA0KDQpgYGB7cn0NCnNpemU8LXJlYWRsaW5lKCJFbnRlciBNIGFuZCBOOiAiKQ0KTTwtYXMuaW50ZWdlcihzdHJzcGxpdChzaXplLCIgIilbWzFdXVsxXSkNCk48LWFzLmludGVnZXIoc3Ryc3BsaXQoc2l6ZSwiICIpW1sxXV1bMl0pDQpkZjwtbWF0cml4KHNhbXBsZSgxOjUwLE0qTiksTSxOKQ0Kb2RkPC0wDQpldmVuPC0wDQpmb3IgKGkgaW4gMTpNKXsNCiAgZm9yIChqIGluIDE6Til7DQogICAgcHJpbnQoZGZbaSxqXSkNCiAgICBpZiAoZGZbaSxqXSUlMj09MCkgew0KICAgICAgZXZlbjwtZXZlbisxDQogICAgfSBlbHNlew0KICAgICAgb2RkIDwtb2RkKzENCiAgICB9DQogIH0NCn0NCnByaW50KHBhc3RlKCJOdW1iZXIgb2Ygb2RkIG51bWJlcnMgaW4gdGhlIG1hdHJpeDoiLG9kZCkpDQpwcmludChwYXN0ZSgiTnVtYmVyIG9mIGV2ZW4gbnVtYmVycyBpbiB0aGUgbWF0cml4OiIsZXZlbikpDQpgYGANCg0K