## Tuesday, October 12, 2010

### Why I hate programming (part 2 of n)

The difference between using "=" and "<-" for assignment in R:

It seems that, historically, "=" was not allowed for variable assignment. My understanding is that in modern R, using "=" for assignment is (mostly) equivalent to using "<-", so that:
x = 2      % This line is the same asx <- 2     % this line.

However, one should be aware that when using "=" to give parameters for functions, assignments do not occur (in the global workspace):
x <- rep(2, times=5)     % "times" does not have value 5times                    % gives an errorx <- rep(2, times<-5)    % "times" IS set to have value 5times                    % this will have value 5

There's also some weird differences with how "<-" and "=" get interpreted (maybe has to do with order of operations / syntactic sugar?):
x = y = 5      % both "x" and "y" will have value 5x <- y <- 5    % both "x" and "y" will have value 5x = y <- 5     % both "x" and "y" will have value 5x <- y = 5     % gives an error

This is what R's documentation has to say about this nonsense:
"The operators <- and = assign into the environment in which they are evaluated. The operator <- can be used anywhere, whereas the operator = is only allowed at the top level (e.g., in the complete expression typed at the command prompt) or as one of the subexpressions in a braced list of expressions."

Labels: ,