I understand. I went through the same process of trying to make R work like C, Perl, Python, Ruby, etc. In other words to act like a nice, normal well behaved imperative/procedural language.
It wasn't until I took up Haskell, a functional language, did I appreciate that R is much alike. The vast majority of day to day work is feeding arguments to functions. There are the minimal features available for limited flow control, but those are mostly vestigial carryovers that are kept around for old time's sake and backward compatibility.
Linear algebra is the classic example. Apply a function to an n-dimensional matrix or apply endless loops. R is interpreted, in-memory and doesn't have great garbage collection. The functional use of the language tempers these drawbacks, while control structures beyond the minimal exaggerate them.