Printing the elements of a vector one per line in R

You know how R prints the elements of a vector horizontally?

> 1:5
[1] 1 2 3 4 5

Today I needed the elements printed one per line. After a bit of searching and hair-pulling, I stumbled upon the cat command:

> cat(1:5,sep="\n")
1
2
3
4
5

This is particularly useful when you need a line-by-line list of the variables in a data frame, which you can get with:

cat(names(dataframe),sep="\n")

To output the list directly to a file, use write instead of cat.

Raising a matrix to a power in R

A surprising deficiency in R is the absence of an operator or built-in function for matrix exponentiation. I had to deal with this today when porting a function from MATLAB to R. Here is my quick-and-dirty solution:

mpower = function(M,p) {
	A = as.matrix(M)

	if (dim(A)[1] != dim(A)[2]) stop("not a square matrix")

	# M^{-1} = the matrix inverse of M
	if (p==-1) return(solve(A))

	# M^0 = I
	if (p==0) return(diag(1,dim(A)[1],dim(A)[2]))

	# M^1 = M
	if (p==1) return(A)

	if (p < -1) stop("only powers >= -1 allowed")
	if (p != as.integer(p)) stop("only integer powers allowed")

	R = A
	for (i in 2:p) {
		R = R %*% A
	}
	return(R)
}

Not the most efficient method, perhaps, but it works. If you know of a better alternative, please add a comment to this blog entry. One possibility might be to port MATLAB’s expm function, as defined in expm1.m in the MATLAB demos directory, to R.

For a detailed review of methods for computing the exponential of a matrix, see:

Moler, Cleve and Charles Van Loan (2003), “Nineteen dubious ways to compute the exponential of a matrix, twenty-five years later,” Society for Industrial and Applied Mathematics, 45 (1), 3-49.

Switching from MATLAB to R

If you’re an experienced MATLAB user and you want to get up to speed quickly on R, these reference guides may prove helpful:

Similarly, R users may wish to refer to these when using MATLAB.