This line is really difficult for me who is java programmer to understand. I think ' <-' ,the operator , is a assign operator. But how could I understand the internal sub-processes. c(5,4) makes vectors with two values and then how does this value to deliver to the dim function's input? This convention is not good for me to be familiar with this.
dim(m) <- c(5,4) # Dimensions set to 5 & 4, so m is now a 5x4 matrix
This is often referred to as "syntactic sugar".
R's objects are theoretically immutable. Doing something like:
dim(m) = c(4,5)
looks like it is changing
m, but in reality the syntax tree is written to be like:
m = D(m, c(4,5))
D is a function that constructs a matrix from another matrix and a new set of dimensions. The previous
m is now probably up for garbage collection, and the name
m now points to the re-dimensioned matrix.
Syntactic sugar like this is used in R in most places where objects seem to mutate, such as
a=2, which is expressed in the syntax tree as
a = B(a,1,2), where
B is a constructor function that creates a vector from the original
a but with the first value set to two.
Note: These assignment functions,
B in the above examples are actually named
[<- in R, I called the
B for clarity because function names with
<- look a bit weird but are perfectly acceptable identifiers in R