1. Write R scripts for each of the following.
  1. A multiprint function that consists of two arguments n and c that prints n copies of character c.
multiprint<-function(n,c) {
  print(rep(c,n))
}
multiprint(3,"B")
  1. An ismultiply function that returns TRUE if the third argument is equal to the multiplication of the first and second argument. The default value of all arguments is 1.
isMultiply<-function(n1=1,n2=1,n3=1) {
  return(n1*n2==n3)
}
isMultiply(2,3,6)
[1] TRUE
  1. An issquare function that returns TRUE if the argument is a square number.
isSquare<-function(n){
  return(sqrt(n)%%1==0)
}
isSquare(5)
[1] FALSE
  1. A generatetwice function that generates random numbers from 1 – 10. The function will display the random number generated and return the first random number that generate twice.
generatetwice<-function(){
  nums<-c()
  while (TRUE){
    num<-sample(1:10,1)
    if (as.character(num) %in% names(nums)){
      print(names(nums))
      return(num)
    }
    nums[as.character(num)]<-1
  }
}
generatetwice()
[1] "9" "8" "6" "2" "3" "5" "1"
[1] 3
  1. Write R scripts for each of the following.
  1. A getfirstlast function that returns the first and last elements of the argument vector.
getfirstlast<-function(v){
  return(c(v[1],v[length(v)]))
}
getfirstlast(c(1,2,3,4))
[1] 1 4
  1. A getrows function that consists of two arguments, the first argument is the data frame and the second argument is the number of rows, n. The function will return the first n rows of the data frame.
getrows<-function(df,n){
  return(df[1:n,])
}
df<-data.frame(
  "ID"=c(1,2,3,4),
  "Name"=c("A","B","C","D")
)
getrows(df,2)
  1. A getrowbyname function that consists of two arguments, the first argument is data frame and the second argument is name rows. The function will return the row based on the name.
getrowbyname<-function(df,name){
  return(df[name,])
}
df<-data.frame(
  "ID"=c(1,2,3,4),
  "Name"=c("A","B","C","D")
)
getrowbyname(df,c(1,3))
  1. A getcolumnbyname function that consists of two arguments, the first argument is data frame and the second argument is column(s) name. The function will return the column(s) stated.
getcolumnbyname<-function(df,name){
  return(df[,name])
}
df<-data.frame(
  "ID"=c(1,2,3,4),
  "Name"=c("A","B","C","D")
)
getcolumnbyname(df,c("Name","ID"))
  1. Create a data frame with the following columns name (“EID”, “EXP1”, “EXP2”, “EXP3”) The value of EID is from 1 to 8, and the value of EXP1, EXP2 and EXP3 is any random number from 1-100.
  1. Store the data frame in a csv file name numtest.csv. After that, read the csv file created and display the mean value for EXP1, EXP2 and EXP3.
  2. Store the data frame in a csv file name numtest1.csv (use ; as separator). After that, read the csv file created and display the min value for EXP1, EXP2 and EXP3.
  3. Store the data frame in a csv file name numtest.rds. After that, read the rds file created and display the max value for EXP1, EXP2 and EXP3.
df <- data.frame(
  "EID"=c(1:8),
  "EXP1"=sample(1:100,8),
  "EXP2"=sample(1:100,8),
  "EXP3"=sample(1:100,8)
)
write.csv(df,"numtest.csv")
df<-read.csv("numtest.csv")
mean(df$EXP1)
[1] 62.5
mean(df$EXP2)
[1] 53
mean(df$EXP3)
[1] 54.375
write.table(df,"numtest1.csv",sep=";")
df<-read.csv("numtest1.csv",sep=";")
df
min(df$EXP1)
[1] 20
min(df$EXP2)
[1] 15
min(df$EXP3)
[1] 17
saveRDS(df,"numtest.rds")
df<-readRDS("numtest.rds")
max(df$EXP1)
[1] 91
max(df$EXP2)
[1] 94
max(df$EXP3)
[1] 98
df
  1. Create an R file named matrixfile.r. The script will ask user to enter M and N. Create a matrix with M rows and N columns with random numbers 1-99 (no duplicate) and save it in matrix.rds. After that, read the rds file and get the maximum and minimum position of the matrix
input<-readline("Enter M and N: ")
2 4
M<-as.integer(strsplit(input," ")[[1]][1])
N<-as.integer(strsplit(input," ")[[1]][2])
df <-matrix(sample(1:99,M*N),M,N)
saveRDS(df,"matrix.rds")
df<-readRDS("matrix.rds")
df
     [,1] [,2] [,3] [,4]
[1,]   44   27   95    3
[2,]   82   35   24   15
arrayInd(which.max(df),dim(df))
     [,1] [,2]
[1,]    1    3
which(df == max(df), arr.ind = TRUE)
     row col
[1,]   1   3
arrayInd(which.min(df),dim(df))
     [,1] [,2]
[1,]    1    4
LS0tDQp0aXRsZTogIkxhYiA1Ig0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KMS4gV3JpdGUgUiBzY3JpcHRzIGZvciBlYWNoIG9mIHRoZSBmb2xsb3dpbmcuDQphLiBBIG11bHRpcHJpbnQgZnVuY3Rpb24gdGhhdCBjb25zaXN0cyBvZiB0d28gYXJndW1lbnRzIG4gYW5kIGMgdGhhdCBwcmludHMgbiANCmNvcGllcyBvZiBjaGFyYWN0ZXIgYy4NCmBgYHtyfQ0KbXVsdGlwcmludDwtZnVuY3Rpb24obixjKSB7DQogIHByaW50KHJlcChjLG4pKQ0KfQ0KbXVsdGlwcmludCgzLCJCIikNCmBgYA0KDQpiLiBBbiBpc211bHRpcGx5IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBUUlVFIGlmIHRoZSB0aGlyZCBhcmd1bWVudCBpcyBlcXVhbCB0byB0aGUgDQptdWx0aXBsaWNhdGlvbiBvZiB0aGUgZmlyc3QgYW5kIHNlY29uZCBhcmd1bWVudC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgYWxsIA0KYXJndW1lbnRzIGlzIDEuDQpgYGB7cn0NCmlzTXVsdGlwbHk8LWZ1bmN0aW9uKG4xPTEsbjI9MSxuMz0xKSB7DQogIHJldHVybihuMSpuMj09bjMpDQp9DQppc011bHRpcGx5KDIsMyw2KQ0KYGBgDQpjLiBBbiBpc3NxdWFyZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgVFJVRSBpZiB0aGUgYXJndW1lbnQgaXMgYSBzcXVhcmUgbnVtYmVyLg0KYGBge3J9DQppc1NxdWFyZTwtZnVuY3Rpb24obil7DQogIHJldHVybihzcXJ0KG4pJSUxPT0wKQ0KfQ0KaXNTcXVhcmUoNSkNCmBgYA0KZC4gQSBnZW5lcmF0ZXR3aWNlIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHJhbmRvbSBudW1iZXJzIGZyb20gMSDigJMgMTAuIFRoZSBmdW5jdGlvbiB3aWxsIGRpc3BsYXkgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGVkIGFuZCByZXR1cm4gdGhlIGZpcnN0IHJhbmRvbSBudW1iZXIgdGhhdCBnZW5lcmF0ZSB0d2ljZS4NCmBgYHtyfQ0KZ2VuZXJhdGV0d2ljZTwtZnVuY3Rpb24oKXsNCiAgbnVtczwtYygpDQogIHdoaWxlIChUUlVFKXsNCiAgICBudW08LXNhbXBsZSgxOjEwLDEpDQogICAgaWYgKGFzLmNoYXJhY3RlcihudW0pICVpbiUgbmFtZXMobnVtcykpew0KICAgICAgcHJpbnQobmFtZXMobnVtcykpDQogICAgICByZXR1cm4obnVtKQ0KICAgIH0NCiAgICBudW1zW2FzLmNoYXJhY3RlcihudW0pXTwtMQ0KICB9DQp9DQpnZW5lcmF0ZXR3aWNlKCkNCmBgYA0KDQoyLiBXcml0ZSBSIHNjcmlwdHMgZm9yIGVhY2ggb2YgdGhlIGZvbGxvd2luZy4NCmEuIEEgZ2V0Zmlyc3RsYXN0IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmlyc3QgYW5kIGxhc3QgZWxlbWVudHMgb2YgdGhlIGFyZ3VtZW50IHZlY3Rvci4NCmBgYHtyfQ0KZ2V0Zmlyc3RsYXN0PC1mdW5jdGlvbih2KXsNCiAgcmV0dXJuKGModlsxXSx2W2xlbmd0aCh2KV0pKQ0KfQ0KZ2V0Zmlyc3RsYXN0KGMoMSwyLDMsNCkpDQpgYGANCmIuIEEgZ2V0cm93cyBmdW5jdGlvbiB0aGF0IGNvbnNpc3RzIG9mIHR3byBhcmd1bWVudHMsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgZGF0YSBmcmFtZSBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgbnVtYmVyIG9mIHJvd3MsIG4uIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgZmlyc3QgbiByb3dzIG9mIHRoZSBkYXRhIGZyYW1lLg0KYGBge3J9DQpnZXRyb3dzPC1mdW5jdGlvbihkZixuKXsNCiAgcmV0dXJuKGRmWzE6bixdKQ0KfQ0KZGY8LWRhdGEuZnJhbWUoDQogICJJRCI9YygxLDIsMyw0KSwNCiAgIk5hbWUiPWMoIkEiLCJCIiwiQyIsIkQiKQ0KKQ0KZ2V0cm93cyhkZiwyKQ0KYGBgDQoNCmMuIEEgZ2V0cm93YnluYW1lIGZ1bmN0aW9uIHRoYXQgY29uc2lzdHMgb2YgdHdvIGFyZ3VtZW50cywgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGRhdGEgZnJhbWUgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbmFtZSByb3dzLiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHJvdyBiYXNlZCBvbiB0aGUgbmFtZS4NCmBgYHtyfQ0KZ2V0cm93YnluYW1lPC1mdW5jdGlvbihkZixuYW1lKXsNCiAgcmV0dXJuKGRmW25hbWUsXSkNCn0NCmRmPC1kYXRhLmZyYW1lKA0KICAiSUQiPWMoMSwyLDMsNCksDQogICJOYW1lIj1jKCJBIiwiQiIsIkMiLCJEIikNCikNCmdldHJvd2J5bmFtZShkZixjKDEsMykpDQpgYGANCmQuIEEgZ2V0Y29sdW1uYnluYW1lIGZ1bmN0aW9uIHRoYXQgY29uc2lzdHMgb2YgdHdvIGFyZ3VtZW50cywgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGRhdGEgZnJhbWUgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgY29sdW1uKHMpIG5hbWUuIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgY29sdW1uKHMpIHN0YXRlZC4NCmBgYHtyfQ0KZ2V0Y29sdW1uYnluYW1lPC1mdW5jdGlvbihkZixuYW1lKXsNCiAgcmV0dXJuKGRmWyxuYW1lXSkNCn0NCmRmPC1kYXRhLmZyYW1lKA0KICAiSUQiPWMoMSwyLDMsNCksDQogICJOYW1lIj1jKCJBIiwiQiIsIkMiLCJEIikNCikNCmdldGNvbHVtbmJ5bmFtZShkZixjKCJOYW1lIiwiSUQiKSkNCmBgYA0KDQoNCjMuIENyZWF0ZSBhIGRhdGEgZnJhbWUgd2l0aCB0aGUgZm9sbG93aW5nIGNvbHVtbnMgbmFtZSAoIkVJRCIsICJFWFAxIiwgIkVYUDIiLCAiRVhQMyIpIFRoZSB2YWx1ZSBvZiBFSUQgaXMgZnJvbSAxIHRvIDgsIGFuZCB0aGUgdmFsdWUgb2YgRVhQMSwgRVhQMiBhbmQgRVhQMyBpcyBhbnkgcmFuZG9tIG51bWJlciBmcm9tIDEtMTAwLiANCmEuIFN0b3JlIHRoZSBkYXRhIGZyYW1lIGluIGEgY3N2IGZpbGUgbmFtZSBudW10ZXN0LmNzdi4gQWZ0ZXIgdGhhdCwgcmVhZCB0aGUgY3N2IGZpbGUgY3JlYXRlZCBhbmQgZGlzcGxheSB0aGUgbWVhbiB2YWx1ZSBmb3IgRVhQMSwgRVhQMiBhbmQgRVhQMy4NCmIuIFN0b3JlIHRoZSBkYXRhIGZyYW1lIGluIGEgY3N2IGZpbGUgbmFtZSBudW10ZXN0MS5jc3YgKHVzZSA7IGFzIHNlcGFyYXRvcikuIEFmdGVyIHRoYXQsIHJlYWQgdGhlIGNzdiBmaWxlIGNyZWF0ZWQgYW5kIGRpc3BsYXkgdGhlIG1pbiB2YWx1ZSBmb3IgRVhQMSwgRVhQMiBhbmQgRVhQMy4NCmMuIFN0b3JlIHRoZSBkYXRhIGZyYW1lIGluIGEgY3N2IGZpbGUgbmFtZSBudW10ZXN0LnJkcy4gQWZ0ZXIgdGhhdCwgcmVhZCB0aGUgcmRzIGZpbGUgY3JlYXRlZCBhbmQgZGlzcGxheSB0aGUgbWF4IHZhbHVlIGZvciBFWFAxLCBFWFAyIGFuZCBFWFAzLg0KYGBge3J9DQpkZiA8LSBkYXRhLmZyYW1lKA0KICAiRUlEIj1jKDE6OCksDQogICJFWFAxIj1zYW1wbGUoMToxMDAsOCksDQogICJFWFAyIj1zYW1wbGUoMToxMDAsOCksDQogICJFWFAzIj1zYW1wbGUoMToxMDAsOCkNCikNCndyaXRlLmNzdihkZiwibnVtdGVzdC5jc3YiKQ0KZGY8LXJlYWQuY3N2KCJudW10ZXN0LmNzdiIpDQptZWFuKGRmJEVYUDEpDQptZWFuKGRmJEVYUDIpDQptZWFuKGRmJEVYUDMpDQp3cml0ZS50YWJsZShkZiwibnVtdGVzdDEuY3N2IixzZXA9IjsiKQ0KZGY8LXJlYWQuY3N2KCJudW10ZXN0MS5jc3YiLHNlcD0iOyIpDQpkZg0KbWluKGRmJEVYUDEpDQptaW4oZGYkRVhQMikNCm1pbihkZiRFWFAzKQ0Kc2F2ZVJEUyhkZiwibnVtdGVzdC5yZHMiKQ0KZGY8LXJlYWRSRFMoIm51bXRlc3QucmRzIikNCm1heChkZiRFWFAxKQ0KbWF4KGRmJEVYUDIpDQptYXgoZGYkRVhQMykNCmRmDQpgYGANCg0KDQo0LiBDcmVhdGUgYW4gUiBmaWxlIG5hbWVkIG1hdHJpeGZpbGUuci4gVGhlIHNjcmlwdCB3aWxsIGFzayB1c2VyIHRvIGVudGVyIE0gYW5kIE4uIENyZWF0ZSBhIG1hdHJpeCB3aXRoIE0gcm93cyBhbmQgTiBjb2x1bW5zIHdpdGggcmFuZG9tIG51bWJlcnMgMS05OSAobm8gZHVwbGljYXRlKSBhbmQgc2F2ZSBpdCBpbiBtYXRyaXgucmRzLiBBZnRlciB0aGF0LCByZWFkIHRoZSByZHMgZmlsZSBhbmQgZ2V0IHRoZSBtYXhpbXVtIGFuZCBtaW5pbXVtIHBvc2l0aW9uIG9mIHRoZSBtYXRyaXgNCg0KYGBge3J9DQppbnB1dDwtcmVhZGxpbmUoIkVudGVyIE0gYW5kIE46ICIpDQpNPC1hcy5pbnRlZ2VyKHN0cnNwbGl0KGlucHV0LCIgIilbWzFdXVsxXSkNCk48LWFzLmludGVnZXIoc3Ryc3BsaXQoaW5wdXQsIiAiKVtbMV1dWzJdKQ0KZGYgPC1tYXRyaXgoc2FtcGxlKDE6OTksTSpOKSxNLE4pDQpzYXZlUkRTKGRmLCJtYXRyaXgucmRzIikNCmRmPC1yZWFkUkRTKCJtYXRyaXgucmRzIikNCmRmDQphcnJheUluZCh3aGljaC5tYXgoZGYpLGRpbShkZikpDQojd2hpY2goZGYgPT0gbWF4KGRmKSwgYXJyLmluZCA9IFRSVUUpDQphcnJheUluZCh3aGljaC5taW4oZGYpLGRpbShkZikpDQpgYGANCg0K