Homework 6 - Vectors

Due: Feb 28 by 11:59pm

Weight: This assignment is worth 4% of your final grade.

Purpose: The purposes of this assignment are:

  • To practice using vectors in R.
  • To practice computational problem solving with vectors.

Assessment: Each question indicates the % of the assignment grade, summing to 100%. The credit for each question will be assigned as follows:

  • 0% for not attempting a response.
  • 50% for attempting the question but with major errors.
  • 75% for attempting the question but with minor errors.
  • 100% for correctly answering the question.

The reflection portion is always worth 10% and graded for completion.

Rules:

  • Problems marked SOLO may not be worked on with other classmates, though you may consult instructors for help.
  • For problems marked COLLABORATIVE, you may work in groups of up to 3 students who are in this course this semester. You may not split up the work – everyone must work on every problem. And you may not simply copy any code but rather truly work together and submit your own solutions.

Readings

The readings from the last week will serve as a helpful reference as you complete this assignment. You can review them here:

Using the autograder

  • You can check your solutions to problems 2 - 6 by logging into the autograder and uploading your hw6.R file.
  • The file must be named hw6.R or it won’t work.
  • Your user name is your netID, and your password is inside the readme.txt file in the Box folder I shared with you.

1) Staying organized [SOLO, 5%]

Download and use this template for your assignment. Inside the “hw6” folder, open and edit the R script called “hw6.R” and fill out your name, GW Net ID, and the names of anyone you worked with on this assignment.

Writing test functions

For each of the following functions, write a test function first, and then write the function. Your test functions will count for half of the available credit for each problem. Think carefully about the test cases to include in your test functions.

Using good style

For this assignment, you must use good style to receive full credit. Follow the best practices described in this style guide.

2) vectorFactorial(n) [SOLO, 10%]

Write the function vectorFactorial(n) which computes the factorial of n using vectors to avoid using a loop. Hint: there are some useful functions listed in the vectors chapter for performing operators on a numeric vector.

3) nthHighestValue(n, x) [SOLO, 15%]

Write a function to find the nth highest value in a given vector. For example, if x equals c(5, 1, 3), then nthHighestValue(1, x) should return 5, because 5 is the 1st highest value in x, and nthHighestValue(2, x) should return 3 because it’s the 2nd highest value in x. Assume only numeric inputs, and assume that n <= length(x). You may not use loops.

4) dotProduct(a, b) [COLLABORATIVE, 20%]

Background: the “dot product” of two vectors is the sum of the products of the corresponding terms. So the dot product of the vectors c(1, 2, 3) and c(4, 5, 6) is (1*4) + (2*5) + (3*6), or 4 + 10 + 18 = 32. With this in mind, write the function dotProduct(a, b). This function takes two vectors and returns the dot product of those vectors. If the vectors are not equal length, ignore the extra elements in the longer vector. You may not use loops.

5) middleValue(a) [COLLABORATIVE, 20%]

Write the function middleValue(a) that takes a vector of numbers a and returns the value of the middle element (or the average of the two middle elements).

6) fibonacciSequence(n) [COLLABORATIVE, 20%]

Write the function fibonacciSequence(n) that returns a vector containing the first n numbers in the Fibonacci Sequence. Assume that n is a whole number greater or equal to 1, and also that the first number in the sequence is 1, so fibonacciSequence(1) == 1 should be TRUE. For all numbers where n > 1, the function should return a vector, e.g. identical(idenfibonacciSequence(2), c(1, 1)) should be TRUE.

7) Read and reflect [SOLO, 10%]

Read and reflect on the following readings to preview what we will be covering next:

Afterwards, reflect on what you’ve learned while going through these readings and exercises. Is there anything that jumped out at you? Anything you found particularly interesting or confusing?

In a comment (#) in your .R file, write at least a paragraph about your thoughts, and include at least one question. This can be on what you’ve learned and any questions or points of confusion you have about what we’ve covered thus far. This can be related to this assignment, next week’s readings, things going on in the world that remind you something from class, etc. If there’s anything that jumped out at you, write it down.

Some thoughts you may want to try in your reflection:

  • “I used to think ______, now I think ______ 🤔”
  • Discuss some of the key insights or things you found interesting in the readings or recent class periods.
  • Connect the course content to your own work or projects you’re working on.

Submit

Create a zip file of all the files in your R project folder for this assignment, then submit your zip file on the corresponding assignment submission on Blackboard.


Bonus 1) rotateVector(a, n) [SOLO, 5%]

Write the function rotateVector(a, n) which takes a vector a and an integer n and returns a new vector where each element in a is shifted to the right by n indices. For example, if a is c(1, 2, 3, 4) and n is 1, the result should be c(4, 1, 2, 3), but if n is -1, the result should be c(2, 3, 4, 1). If n is larger than the length of a, the function should continue to rotate the vector beyond its starting point. So, if a = c(1, 2, 3, 4) and n = 5, then the result should be a = c(4, 1, 2, 3).