I teach R for bio applications, and I’m a botanist as well, so I like seeing this post.
I think as a starting language R is a much better choice than Python, for a number of reasons. R is very stable and consistently documented in a fairly standard format, whereas Python has a few (non-compatible) versions still in active use, which can cause beginners a lot of frustration. Python it is also super-duper dependent on packages/libraries to do a lot of things, to a greater degree than R is. Those Python libraries are often documented in various different ways, from read.me files, to just plain script annotations, to idiosyncratic tutorials, and those documents are often posted all over the internet, not in one place, whereas any package you use in R (if is on the standard repository) will have a standard format manual document, and help pages for any function within that package.
Ideally, it is good to know both. They are really “competitors”, so much as different tools better suited to different applications. R is optimized for stats and graphing, which makes up the bulk of what a lot of biologists (and other researchers) actually need to do on a regular basis, so that is why it has stuck around in essentially the same form for half a century. Python is a good general-purpose language for a lot of different tasks, and handles huge datasets (like millions of rows) better than R, but Python can be much more clunky for certain standard data analysis tasks (i.e. stats and graphing), IMHO. But they both have their place.
Here are my recommendations on R:
I think for some basic starters it would be really great to just try to do some basic parsing, calculation, and graphing of observation data for a single species (like Desmodium tweedyi, as you mentioned).
Doing some things with the observation date data could make for some nice, easily achievable, but challenging tasks. For example, plotting the number of observations over time, or the mean or total number of observations by month in the calendar. This presents a small but doable challenge, since R doesn’t natively know how to deal with date formats, and does require (just one, very easy-to-use) package to parse dates, but it is one of the easiest package-related tasks you could do in R. The package is called “lubridate”, and it has function to turn date “strings” into a plottable and workable format in R.
Working through the input, formatting, calculation, and plotting of some basic graphs like that would be a very doable but gratifying thing to do.
I think the other comment recommending using ggplot2 for some mapping is a cool idea, and I think the set of packages related to ggplot2 can very handy for some complex plots of various particular types, but I would also encourage you try doing some basic plots first with what we call “Base R” graphics. Base R is just all of the plotting functions that are natively part of R. These functions get poo-pooed at a lot lately, after ggplot2 became so popular, as there is a bit of a learning curve for Base R plotting, but honestly, I find students pick up Base functions about as quickly as ggplot2 in reality, and it has the other benefit that Base uses typical R syntax. The syntax of ggplot2 is a lot like learning a second sub-language within R, with different syntax, which I think can be a little bewildering for beginners, since it is not consistent with the rest of R you will be learning. So I always recommend doing a set of basic graphs like scatterplots, histograms, boxplots, dotplots, barplots etc in Base R first.
For very early starters, you can always use some pre-loaded datasets like iris, cars, etc, there are tons pre-loaded in R. That avoids a common problem where some obscure file formatting nonsense prevents a student from accomplishing anything, as they can’t get data loaded in to even do anything.
Finally, I would also highly recommend doing at least some of the first lessons in swirl before you tackle any real data. Swirl is a package that teaches you R in R, assuming zero familiarity with the language. It works like an old-school text-based adventure computer game, and I’ve only ever heard good things about it from students of mine to whom I’ve assigned it to in the past.
Installing and launching swirl is this simple:
install.packages(“swirl”) # Click through whatever server options and dialog boxes.
library(swirl)
swirl()
From there swirl will guide you through the process.
This is already long, so I’ll wrap it up, but my biggest piece of advice is just to find some early tractable tasks, accept that you will struggle with them for a bit (beginner errors), and then celebrate when you get something to work. That’s what makes programming fun. Setting a goal, struggling with it, and then accomplishing it. It’s a blast.
Good luck!