# Creating interaction variables - Do we always have to “center” the variables first?

I have a multiple regression model (in R) that looks as follows:

The model attempts to find the relationship between TV advertising and Radio advertising (dollars) on sales. I'd like to also create an interaction variable between TV and Radio. I was reading the following article on how to do this, and the author states that the two variables involved in the interaction must be "centered" first (to avoid multicollinearity) before combining them into an interaction variable. Is this always necessary (especially if I already know the two variables have little correlation)? If this is generally necessary, can the R scale() function be used to standardize each variable?

Few things are always necessary. Centering can help if there is multicollinearity, which can occur regardless of the initial (lack of) correlation between the interaction terms. The VIF test can tell you if you need to worry about collinearity if it is greater than (depending on source) 2.5 - 5. In R, after you fitted a model with interaction, just do vif(model.fit). If multicollinearity is a problem, it isn't a problem if it occurs on control variables - it only affects the collinear terms, not the others. Last thing, centering also helps comparing the regular and interaction models, since the meaning of the coefficients remain mostly the same, since 0 is the mean. For more information and examples, see this good post on interaction terms and centering.
Regarding your second question, whether scale() could work instead:
Yes... And not exactly. Sure, scaling coefficients also centers them, but it also removes their meaningful units. No longer for each dollar, but for each increase in a standard deviation in the dollar amount. Not very convenient for interpretative purposes. It is better just to center them by removing the mean from the observations, or like so (actually using the scale() function, but without the standardization, which is what the scale=FALSE does):
CaseStudyData$TV_cntrd <- scale(CaseStudyData$TV, scale = FALSE)