Do you want to share your content on R-bloggers? Click here if you have a blog, or here If you don’t.
Due to delays with my stock market payment, if this message is useful for you, I kindly request a minimal donation Buy a coffee for me That will be used to continue my open source efforts. If you need an R package or a shiny dashboard for your team, you can e -mail me or ask me Fiverr. The complete explanation is here: A personal message from an Open Source employee
You can send me questions for the blog using This form.
I received this question from a reader: How do I learn C ++ as an R user?
I am not a teacher, so I will try to respond based on my own learning process. In 2023 I tried to accelerate a code that I wrote to perform a general balance of pseudo pseudo poisson maximum probability (Geppml) simulation. After checking each part of the code – which consisted of multiple linear algebra operations – and making changes to prevent inefficiencies, such as rewriting objects, use for loops instead of mapply()With the help of a double loop instead of the outer() Function and comparison It was clear that C ++ could be a better option in terms of speed.
After I had used RCPParmadillo earlier, I asked a Redeble question on Stackoverflow only to receive negative comments such as “you are stupid” and others in the same line, I started reading about a new R -package called CPP11 that was made as an alternative to RCPP. Again, I went back to Stackoverflow when another user wrote “Go Cry Somewhere Else” about my question.
After searching for online sources that could help me with my questions, I went looking for online teachers and I could not find a person with experience in C ++ and a reasonable concept of linear algebra. My solution was to register for ECE244 (Programming Fundamentals) And spend 1-2 hours daily to transcribe my class notes and to think about how to use what I was learning there for my specific problem. It was great to take ECE244 Professor Salma EmaraAnd I am happy that I attended her lectures that C ++ Fundamentals have treated.
Some people claim to learn C for C ++. In my case I know very little about C and I never followed a formal course about C before I learned C ++. Prof. Emara has two books, one left C And another about it C ++ That is similar to the content of ECE244. I would say that C to C ++ is what S-Plus is to r, knowing that S-Plus can help a little to understand R-syntax with multiple differences.
As I said before, I had to solve linear algebra problems, but the starting point is to get a working C ++ compiler. I have heard that this can be difficult on Windows, but both Linux and Mac offer it standard (for example the G ++ assignment in the terminal). I organized the steps that worked for me from drawing up a simple program to the use of Armadillo, a special linear algebra library for C ++, in the free e book C ++ for R -users. What I found useful was to do things I already wrote in R with the help of C ++, so I organized the R codes from Hansen’s Econometrics Textbook with Gordelijlo with R integration in the Hansen package.
I think it is crucial to follow a gradual approach, starting with simple functions such as:
#includeint main() { int a = 1; std::cout << a + 1 << std::endl; return 0; }
with which can be compiled g++ plus1.cpp -o test (or other variations such as g++ in.cpp -o out) and then see the result with ./test (or ./out).
Would be the same in r:
main <- function() {
a <- 1
print(a + 1)
}Not recording Iostream to print “A+1” would result in a compiler error, and we would also get a mistake if we did not return 0 in C ++ that would be similar to the return of “True” in R, even if it is not required.
A literal translation of the C ++ code would be:
main <- function() {
a <- 1
print(a + 1)
return(TRUE)
}In R we can also do this:
main = function() {
a = 1L
print(a + 1)
}In C ++ 1, however, 1L means in R. The standard setting in C ++ is that numbers are entire numbers, while in the standard there is a double
> x = 1 > y = 1L > z = 1.0 > class(x) [1] "numeric" > class(y) [1] "integer" > class(z) [1] "numeric"
In C ++ we can do something like:
int a = 1; double b = 2.0; double c = a + b;
which would be different in terms of storage when we use int c = a + b;.
C ++ is a language that enforces the right types and one ; Would result in warnings or compiling errors. The only way to avoid this is to practice and be consistent.
What helped me to learn C ++ was:
- Write in words what I have to do
- Respond my code
- Do not first think of efficiency, but correctness
Once I got the right results, I started to think about things such as:
- Does my code use memory efficiently?
- Do I overwrite objects?
- Do I duplicate data?
I believe that C ++ is a beautiful and useful language. It can be a challenge in the beginning, but I remember that I learned R in 2015 and everything was a challenge.
As soon as you get simple examples to perform, you can (and must) explore instructions, continue, continue through reference and really interesting C ++ functions with which we can really be efficient in terms of memory use if necessary. These concepts can be a challenge because r (neither Python) offer them. The key is:
Don’t panic and always know where your towel is
As soon as you can write with confidence C ++ code, you must start thinking about R and C ++ integration using the CPP11 package or CPP11armAhardillo. If you have experience making R -packages, you might start with R and C ++ integration with simple examples.
I once struggled to build a simple program as the example I shown in this post, but then I started to cry somewhere else, as the Stackoverflow user said, I stated Prof. dr. Emara many questions, searched YouTube videos and started to think about how I could rewrite my own R codes with C ++.
Since then I have published four scientific articles with a strong software component where I used C ++ to solve a problem:
Vargas SepĂşlveda, Mauricio. 2025. “Capybara: efficient estimate of generalized linear models with high-dimensional fixed effects.” Plos One Available publicly on 2025-08-25. https://doi.org/10.1371/journal.pone.0331178.
Vargas SepĂşlveda, Mauricio. 2025. “Kendallknight: an R package for an efficient implementation of the calculation of the correlation coefficient of Kendall.” Plos One 20 (6): E0326090. https://doi.org/10.1371/journal.pone.0326090.
De Schneyer and Schneyer Malamud, Jonathan. 2025. “CP11 Armdillo: SoftwareX 30 (May): 102087. https://doi.org/10.1016/j.softx.2025.102087.
Vargas SepĂşlveda, Mauricio and Barkai, Lital. 2025. “The Redatam format and the challenges for data access and information creation in public policy.” Data and policy 7 (January): E18. https://dx.doi.org/10.1017/dap.2025.4.
I hope this is useful 🙂
Related
#learn #user #RBloggers


