# # Introspection

## # Functions for Learning about Variables

Often in `R` you'll want to know things about an object or variable you're working with. This can be useful when reading someone else's code or even your own, especially when using packages that are new to you.

Suppose we create a variable `a`:

``````a <- matrix(1:9, 3, 3)

``````

What data type is this? You can find out with

``````> class(a)
 "matrix"

``````

It's a matrix, so matrix operations will work on it:

``````> a %*% t(a)
[,1] [,2] [,3]
[1,]   66   78   90
[2,]   78   93  108
[3,]   90  108  126

``````

What are the dimensions of `a`?

``````> dim(a)
 3 3
> nrow(a)
 3
> ncol(a)
 3

``````

Other useful functions that work for different data types are `head`, `tail`, and `str`:

``````> head(a, 1)
[,1] [,2] [,3]
[1,]    1    4    7
> tail(a, 1)
[,1] [,2] [,3]
[3,]    3    6    9
> str(a)
int [1:3, 1:3] 1 2 3 4 5 6 7 8 9

``````

These are much more useful for large objects (such as big datasets). `str` is also great for learning about the nesting of lists. Now reshape `a` like so:

``````a <- c(a)

``````

Does the class remain the same?

``````> class(a)
 "integer"

``````

No, `a` is not a matrix anymore. I won't get a good answer if I ask for dimensions now:

``````> dim(a)
NULL

``````

``````> length(a)
 9

``````

``````> class(a * 1.0)
 "numeric"

``````

Often you may work with `data.frames`:

``````a <- as.data.frame(a)
names(a) <- c("var1", "var2", "var3")

``````

See the variable names:

``````> names(a)
 "var1" "var2" "var3"

``````

These functions can help many ways when using `R`.