| Reading | Slides | Lecture1 | Assigned | Due | |
|---|---|---|---|---|---|
| Mar-30 | AdvR(2e) Intro | ||||
| AdvR(2e) 3 | |||||
| 1 Passcode: $L6&HnNN | |||||
Syllabus
EDLD 653: Functional Programming for Educational Data Science
(CRN: 31621; 3 credit hours)
Introduction to Course and Instructor
Term: Spring 2026
Time: Mon, 1:00-3:50pm
Classroom: 142 HEDCO
Instructor: Joe Nese, PhD
- email: jnese@uoregon.edu (preferred contact method)
- office hours: By appointment
Course Overview
This is the third course in a sequence of courses that will eventually lead to a data science in educational research specialization. All courses will be taught through R, a free and open-source statistical computing environment. This course builds upon the content covered in the first two courses, with a specific focus on becoming a better programmer and improving workflows. Students will continue to work with the {tidyverse} suite of packages in R, with a emphasis on {purrr} for functional programming. At its core, functional programming is a technique to iterate a function over a vector, or set of vectors, to complete repetitive tasks. We will compare and contrast {purrr} functions with base R approaches, including for loops and the apply family of functions. Functional programming helps reduce redundancies in code, making it more efficient, less error-prone and, often, more readable. The course will also cover writing custom functions, which can also help in completing repetitive tasks, but can also extend the functionality of R, and is a key component of functional programming. The course concludes with a brief introduction to shiny for building interactive applications which, although somewhat outside of the scope of functional programming, requires using (and often writing) functions.
Acknowledgment. This course, and much of the materials prepared and content presented, was originally developed by Daniel Anderson and Cengiz Zopluoglu. In collaboration with Daniel Anderson, Alison Hill, Chester Ismay, and Andrew Bray, helped design the content for this course and the specialization as a whole.
Student Learning Outcomes
By the end of this course, students should be able to:
- Understand and be able to describe the differences in
R’s data structures (including the four main vector types, data frames, and lists) and when each is most appropriate for a given task - Explore
purrr::map()and its variants, how they relate to baseRfunctions, and why the{purrr}variants are often preferable - Work with lists and list columns using
purrr::nest()andpurrr:unnest() - Convert repetitive tasks into functions
- Understand elements of good functions, and things to avoid
- Write effective and clear functions to continue with the mantra of “Don’t Repeat Yourself”
Course Prerequisites
Enrolling in this course requires successful completion of the first two courses in the EDS specialization (EDLD 651 and EDLD 652). Students who waived the first course are assumed to have the knowledge and skills as covered and taught in EDLD 651.
Course Modality
This is an in-person course: that means that, unlike asynchronous online/ASYNC WEB courses, we will meet during scheduled class meeting times. I will accommodate absences as described in the Absences policy below. If you need additional flexibility, UO encourages you to consider ASYNC WEB courses. If you need accommodation related to a medical or other disability, you can request those by working with the Accessible Education Center.
Books
All required course readings are freely available online or will be provided by the instructor. Note that the assigned readings should be read before each class.
- Wickham, H. (2019). Advanced R: Second edition. (referred to as AdvR(2e) in the weekly schedule)
- Wickham, H., Çetinkaya-Rundel, M., & Grolemund, G. (2023). R for data science: Second Edition. (referred to as R4DS(2e) in the weekly schedule)
- Wickham, H., & Grolemund, G. (2017). R for data science. (referred to as R4DS(1e) in the weekly schedule)
- Wickham, H. (2021). Mastering Shiny.
Assignments (200 points total)
This course includes three labs (20 points each), a take-home Midterm test (70 points), and a take-home Final exam (70 points).
Labs (60 points; 30%)
Each lab is worth 20 points and is scored on a “best honest effort” basis. Please do not turn in partial work. Instead, please ask for help. Each lab will include dedicated in-class time, but it is expected that most labs will require additional time outside of class. Contact the instructor for help rather than submitting incomplete work. If the assignment is not complete, and you have not contacted me for help, it is likely to result in a partial credit or zero score.
Midterm Test (70 points; 35%)
The take-home Midterm will be completed outside of class time, and responses will be scored on a correct/incorrect basis rather than a “best honest effort”. The Midterm will primarily cover working with and subsetting lists, as well as iterating with {purrr}. The Midterm is worth 70 points (35% of your grade).
Final Exam (70 points; 35%)
The Final exam is similar to the midterm, in that it will be completed outside of class time, and responses will be scored on a correct/incorrect basis rather than a “best honest effort”. The Final could cover anything covered in this course. The Final is worth 70 points (35% of your grade).
Weekly Schedule (Topics, Assignments, and Readings
See Schedule for complete course schedule.
Week 1: Intro & Data Types
Week 2: Iterations & Lab 1
| Reading | Slides | Lecture1 | Assigned | Due | |
|---|---|---|---|---|---|
| Apr-06 | AdvR(2e) 5 | Lab 1 | |||
| 1 Passcode: NA | |||||
Week 3: Iterations & Lab 2
| Reading | Slides | Lecture1 | Assigned | Due | |
|---|---|---|---|---|---|
| Apr-13 | R4DS(1e) 25 | Lab 2 | Lab 1 | ||
| AdvR(2e) 9.1-9.3 | |||||
| 1 Passcode: NA | |||||
Week 4: Batch Load Data & List Columns
| Reading | Slides | Lecture1 | Assigned | Due | |
|---|---|---|---|---|---|
| Apr-20 | {fs} | Lab 2 | |||
| AdvR(2e) 9.4-9.6 | |||||
| 1 Passcode: NA | |||||
Week 5: Parallel Iterations & Looping Variants
| Reading | Slides | Lecture1 | Assigned | Due | |
|---|---|---|---|---|---|
| Apr-27 | Midterm Test | ||||
| 1 Passcode: NA | |||||
Week 6: Writing Functions
| Reading | Slides | Lecture1 | Assigned | Due | |
|---|---|---|---|---|---|
| May-04 | Creating Functions (SC) | Midterm Test | |||
| AdvR(2e) 6.1-6.4 | |||||
| 1 Passcode: NA | |||||
Week 7: Writing Functions & Lab 3
| Reading | Slides | Lecture1 | Assigned | Due | |
|---|---|---|---|---|---|
| May-11 | AdvR(2e) 6.5-6.8 | Lab 3 | |||
| 1 Passcode: NA | |||||
Week 8: Shiny
| Reading | Slides | Lecture1 | Assigned | Due | |
|---|---|---|---|---|---|
| May-18 | Shiny Basics | Lab 3 | |||
| How to Build a Shiny App | |||||
| Mastering Shiny: Ch1 | |||||
| 1 Passcode: NA | |||||
Week 9: No class: Memorial Day
Week 10: Shiny & Review
| Reading | Slides | Lecture1 | Assigned | Due | |
|---|---|---|---|---|---|
| Jun-01 | Mastering Shiny: Ch3 | Final Exam | |||
| Mastering Shiny: Ch5 | |||||
| Mastering Shiny: Ch17 | |||||
| 1 Passcode: NA | |||||
Week 11: No class: Final exam due
Course Policies
Grading Components
| Grading Components | ||||
| Lower % | Lower point range | Grade | Upper point range | Upper % |
|---|---|---|---|---|
| 97 | 194 or more | A+ | ||
| 93 | 186 | A | 192 | 96 |
| 90 | 180 | A- | 184 | 92 |
| 87 | 174 | B+ | 178 | 89 |
| 83 | 166 | B | 172 | 86 |
| 80 | 160 | B- | 164 | 82 |
| 77 | 154 | C+ | 158 | 79 |
| 73 | 146 | C | 152 | 76 |
| 70 | 140 | C- | 144 | 72 |
| F | 138 or less | 69 | ||
Student Engagement Inventory
Graduate: 1 credit hour = 40 hours of student engagement (3 credit hours = 120 hours of student engagement).
| Student Engagement Inventory | ||
| Educational activity | Hours student engaged | Explanatory comments (if any): |
|---|---|---|
| Course attendance | 28.3 | 10 meetings at 170 minutes per meeting |
| Assigned readings | 28.7 | Weekly readings are assigned, and expected to take about as long to complete as the in-seat time per week |
| Labs | 15.0 | 3 labs assignments, at approximately 5 hours each outside of class |
| Midterm Test | 20.0 | Take-home Midterm test |
| Final Exam | 28.0 | Take-home Final exam |
| Total hours: | 120.0 | |
Communicating with Me: How and Why
How will I communicate with you? Our class will communicate through our Canvas site. Announcements and emails are archived there, automatically forwarded to your UO email, and can even reach you by text. Check and adjust your settings under Account > Notifications.
When I need to get in touch with individual students, I do so through email.
When giving feedback on assignments, I do so in Canvas, and turnaround time for feedback is generally one week.
How can you communicate with me? If your question (or comment) is about a technical challenge with Canvas or another technology, please contact the UO Service Portal. If it is about course content or activities, about something personal, time sensitive, or something else that doesn’t feel like it fits above, please reach out to me by email. I try to respond to questions within one business day.
Why should you communicate with me? I enjoy talking with students about our course material! Are you confused or excited about something? Wondering how what we’re learning relates to current events, career choices, or other classes you can take UO? Please be in touch! Please also be in touch to tell me how you are doing in the course. If you are having trouble with some aspect of it, I would like to strategize with you. I believe every student can succeed in this course, and I care about your success.
Classroom Community Expectations
Participate and Contribute: All students are expected to participate by sharing ideas and contributing to the learning environment. This entails preparing, following instructions, and engaging respectfully and thoughtfully with others. While all students should participate, participation is not just talking, and a range of participation activities support learning. Participation might look like speaking aloud in the full class and in small groups as well as submitting questions prior to class or engaging with Discussion posts. We will establish more specific participation guidelines and criteria for contributions in our first weeks of the term.
Expect and Respect Diversity: All classes at the University of Oregon welcome and respect diverse experiences, perspectives, and approaches. What is not welcome are behaviors or contributions that undermine, demean, or marginalize others based on race, ethnicity, gender, sex, age, sexual orientation, religion, ability, or socioeconomic status. We will value differences and communicate disagreements with respect. We may establish more specific guidelines and protocols to ensure inclusion and equity for all members of our learning community.
Help Everyone Learn: Part of how we learn together is by learning from one another. To do this effectively, we need to be patient with each other, identify ways we can assist others, and be open-minded to receiving help and feedback from others. Don’t hesitate to contact me to ask for assistance or offer suggestions that might help us learn better.
Course Attendance and Engagement
This is a face-to-face course. Attendance is important because we will develop our knowledge through in-class activities that require your active engagement. We’ll have discussions, small-group activities, and do other work during class that will be richer for your presence, and that you won’t be able to benefit from if you are not there. Excessive absences make it impossible to learn well and succeed in the course. While there is not an automatic grade deduction for missing classes, it is unlikely that students who miss 6 or more classes will be able pass this course. That said, if you are feeling ill, please stay home to heal and avoid infecting your classmates. Please take absences only when necessary, so when they are necessary, your prior attendance will have positioned you for success. If you must miss a class, please fill out the absence report form.
My course attendance and engagement policies were built with absences and deadline flexibility that students commonly need in mind. There are, however, times when a student may experience an extraordinary circumstance—an unanticipated and significant crisis—that impacts their attendance. Exceptions to the attendance policy and/or deadlines may be granted in the event of extraordinary circumstances. Please contact me as soon as you are able to request it—ideally before the class or deadline has passed, or, if your circumstance makes this difficult, then as soon as possible afterwards. This exception will not be offered on an open-ended basis, so if you need to ask for it, please give some consideration to how much time you will realistically need to complete the work. To activate this policy, send me an email with “Extraordinary circumstance request” in the subject line, and if you are requesting deadline flexibility, let me know by what updated deadline you will be able to submit your assignment. There is no need to explain or offer information about the nature of the extraordinary circumstance in your email—we will trust you only to activate this policy in crisis situation. Please note, too, that detailed feedback on your written work may be delayed or impossible to provide if you’re submitting to meet an extended deadline. At the end of term, granting extensions is hard for the teaching team because of UO’s tight turnaround on grading. Please be in touch in an emergency and we can discuss your options.
Generative Artificial Intelligence Use
Students may use GenAI tools in this class to help with coursework and assignments. Helpful uses include assistance for code checking, generation, or explanation. However, if you include in your assignment submissions any content that GenAI generates, you must cite the GenAI tool that is your source, in the same way that you must cite any content you use from other sources, such as books, articles, videos, the internet, etc.
Students are encouraged to approach GenAI tools cautiously, particularly as beginners in R programming. While GenAI can provide valuable insights and guidance, excessive reliance on these tools can hinder the development of essential problem-solving and debugging skills necessary for becoming proficient in programming. Additionally, GenAI-generated code may not always be accurate, efficient, or aligned with best practices, which can potentially introduce errors or misconceptions into your work. As you build your foundational programming skills, prioritize actively writing, reading, and troubleshooting your own R code, using GenAI primarily as a supplementary resource rather than a primary source of solutions.
Note. The second paragraph of this section was generated by ChatGPT 4.5. See the link for a copy of the prompt. https://chatgpt.com/share/67ea4c72-8e78-800d-9411-44e6b8d59be9
Grievance Policy
A student or group of students of the College of Education may appeal decisions or actions pertaining to admissions, programs, evaluation of performance and program retention and completion. Students who decide to file a grievance should follow University student grievance procedures and/or consult with the College Associate Dean for Academic Affairs: Edward M. Olivos at emolivos@uoregon.edu or 541-346-2983.
University Policies
The University of Oregon policy statements now exist on the student-facing University Course Policies page and are also linked to from every Canvas course site.