# R is not C

I keep trying to write R code like it was C code. It is a habit I'm trying to break myself of.

For example, the other day I need to construct a model matrix of 1's and 0's in the standard, counting in binary, pattern. My solution was:

```n <- 8
powers <- 2^(0:(n-1))
NN <- (max(powers)*2)
designMatrix <- matrix( NA, nrow=NN, ncol=n)
for( ii in 0:(NN-1) ) {
leftOver <- ii
for ( jj in 1:n ) {
largest <- rev(powers)[jj]
if ( leftOver != 0 && largest <= leftOver ) {
designMatrix[ii+1,jj] <- 1
leftOver <- leftOver - largest
} else {
designMatrix[ii+1,jj] <- 0
}
}
}
print(designMatrix)
```

The code works, but it is a low-level re-implementation of something that already exists in base R. R is not C, because base R has pieces that implement statistical ideas for you. Consider:

```expand.grid                package:base                R Documentation

Create a Data Frame from All Combinations of Factors

Description:

Create a data frame from all combinations of the supplied vectors
or factors.  See the description of the return value for precise
details of the way this is done.
```

So then instead of writing (and debugging!) a function to make a binary model matrix, I could have simply used a one-liner:

```# Note that c(0,1) is encased in list() so that
# rep(..., n) will repeat the object c(0,1) n
# times instead of its default behavior of
# concatenating the c(0,1) objects.
designMatrix_R <- as.matrix( expand.grid( rep( list(c(0,1) ), n) ) )
```

I like it. It is both shorter and easier to debug. Now I just need to figure out how to find these base R functions before I throw up my hands and re-implement them in C.