- Write R scripts for each of the following.
- 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")
- 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
- 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
- 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
- Write R scripts for each of the following.
- 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
- 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)
- 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))
- 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"))
- 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.
- 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.
- 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.
- 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
- 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