For “I” specifically, we don’t have a final. There are a variety of reasons for this, but the main one is because “i” in Pinyin represents three distinct pronunciations, so wouldn’t fit easily into our mnemonic system of each letter groups (i.e., “Sound”) having its own distinct pronunciation.
The three “i” pronunciations
These three separate pronunciations are actually represented in this excellent Standard Pinyin chart. I’ll go over each of them.
Pronunciation #1
“i” can be pronounced like “ee” in the English word “see”.
Pronunciation #2
“i” in Pinyin can also be pronounced like the “i” in the English word “sit”.
Pronunciation #3
Lastly, “i” can be pronounced sort of like “i” in the English word “chirp”.
How our system works, instead
To get around the fact that “i” represents three distinct pronunciations (another of Pinyin’s MANY quirks), we make two small changes.
Create new set of initials for the “ee” pronunciation
For the “ee” pronunciation, we simply create a new set of initials. E.g., “bi”, “di”, “ti”. This is useful because that specific “i” is also a medial in some cases (e.g., “bian” is “bi-” + “an”). It is similar to what we did with making a new set of initials with the “u” medial as mentioned in the post this thread was split from.
Have the other two pronunciations represented by “null”
For the other two “i” pronunciations, we represent it by the null sound. This is the best of all choices. We can’t have a separate “i” final because it could still represent two different pronunciations. If we make a new set of initials (“si”, “zhi”, etc), those aren’t useful because the other two “i” pronunciations are not medials, so these initials could only be combined with the null final anyway.
Because of this, “ri” is represented as “r-” + “-_”.
All of that is quite a bit. I’m happy to go into more details about any of it to make it more clear. The gist of it is that Pinyin has major flaws that don’t work with a nice mnemonic system, and this modification works around those flaws.