In: Computer Science
Use R programming Language
Q1.
(a)Write a function called lowerTrim that takes 2 arguments: x and trimBelow. This function takes the average of those values in x that are greater than the trimBelow. Make x a required argument and supply a default value for trimBelow of negative infinity.
First create some variable to be used for testing later.
x = 1:5 y = letters z = list(a = 1:5, b = 1:10)
Now test your function with the following
lowerTrim(x) lowerTrim(-10:5, trimBelow = 0) lowerTrim(-10:5, -2) lowerTrim(x = -10:5, trimBelow = Inf)
The return values should be: 3, 3, 2, and NaN, respectively
(b). Extend your function so that it takes a third parameter, which allows the caller to use a function other than mean() when calculating the lowerTrim. Call this argument sumFunc and give it a default value so that it operates like the original lowerTrim function. Call this revised function lowerTrim2
Check your function with the following calls:
lowerTrim2(-10:20, trimBelow = -5, median) lowerTrim2(-10:20, trimBelow = 0, sumFunc = summary)
The return values should be 8 and the summary values of 1, 5.75 10.5, 10.5, 15.2, and 20.
(c) Modify your function to take in any argument through the ... argument and pass these arguments. Call this new function lowerTrim3.
And test your code with
lowerTrim3(x, sumFunc = sd) lowerTrim3(-10:20, trimBelow = 0, sumFunc = quantile, probs = 0.99) lowerTrim3(-10:20, trimBelow = 0, trim = 0.1)
The results should be 1.58, 19.8, and 10.5.
a)
Program:
Sample output:
Code to copy:
#Returns mean of numbers that are greater than trimBelow
lowerTrim <- function(x,trimBelow=-Inf)
{
#Create an empty vector
vector = c()
#Declare a varaible to keep track the index of vector
j<-1
#Interate through x
for( ele in x)
{
#If the ele is greater than trimBelow,
#Add it to vector
if(ele > trimBelow)
{
vector[j] <- ele
#Increment the index by 1
j<-j+1
}
}
#Return the mean of vector
res.mean<-mean(vector)
}
b)
Program:
Sample output:
Code to copy:
#Returns the result on applying sumFun,on numbers that
#are greater than trimBelow
lowerTrim2 <- function(x,trimBelow=-Inf,sumFunc=mean)
{
#Create an empty vector
vector = c()
#Declare a varaible to keep track the index of vector
j<-1
#Interate through x
for( ele in x)
{
#If the ele is greater than trimBelow,
#Add it to vector
if(ele > trimBelow)
{
vector[j] <- ele
#Increment the index by 1
j<-j+1
}
}
#Return the mean of vector
result<-sumFunc(vector)
}
c)
Program:
Sample output:
Sample run:
Code to copy:
#Returns the result on applying sumFun,on numbers that
#are greater than trimBelow
lowerTrim3 <- function(x,trimBelow=-Inf,sumFunc = mean,...)
{
#Create an empty vector
vector = c()
#Declare a varaible to keep track the index of vector
j<-1
#Interate through x
for( ele in x)
{
#If the ele is greater than trimBelow,
#Add it to vector
if(ele > trimBelow)
{
vector[j] <- ele
#Increment the index by 1
j<-j+1
}
}
#Return the result of sumFun on vector
result<-sumFunc(vector,...)
}