Many programming languages have a function to evaluate a string as code or an
expression, e.g., eval() in R. Once you learn it, it becomes tempting to abuse
it. Instead of writing code naturally and directly, you start to think about
writing code that constructs code to be evaluated. For example, instead of
writing 1 + 1, you may write a monster like this:
eval(parse(text = paste(c('1', '1'), collapse = '+')))
This is obviously just a silly example, but I have seen people abuse eval() in
R many times in the past, often due to the lack of understanding of a function.
One example is a recent Stack Overflow
question. The OP wants to include
a series of figures via knitr::include_graphics(), but didn’t realize that
this function can just take a vector of figure paths, and then the OP wrote code
to construct code consisting of a series of knitr::include_graphics() calls.
This way of thinking not only often leads to clumsy code, but also brings security risks when you, as a developer, allow users to input any string to be evaluated.
Of course, eval(parse()) has its great value and I’m not saying it should be
banned. For example, the whole knitr package is built on top of it (for
evaluating code chunks as code strings). However, I feel it’s almost surely the
wrong way to go in your daily programming job. There should be a better way.
Donate
As a freelancer (currently working as a contractor) and a dad of three kids, I truly appreciate your donation to support my writing and open-source software development! Your contribution helps me cope with financial uncertainty better, so I can spend more time on producing high-quality content and software. You can make a donation through methods below.
-
Venmo:
@yihui_xie, or Zelle:xie@yihui.name -
Paypal
-
If you have a Paypal account, you can follow the link https://paypal.me/YihuiXie or find me on Paypal via my email
xie@yihui.name. Please choose the payment type as “Family and Friends” (instead of “Goods and Services”) to avoid extra fees. -
If you don’t have Paypal, you may donate through this link via your debit or credit card. Paypal will charge a fee on my side.
-
-
Other ways:
WeChat Pay (微信支付:谢益辉) Alipay (支付宝:谢益辉) 

When sending money, please be sure to add a note “gift” or “donation” if possible, so it won’t be treated as my taxable income but a genuine gift. Needless to say, donation is completely voluntary and I appreciate any amount you can give.
Please feel free to email me if you prefer a different way to give. Thank you very much!
I’ll give back a significant portion of the donations to the open-source community and charities. For the record, I received about $30,000 in total (before tax) in 2024-25, and gave back about $15,000 (after tax).