Skip to content
Prev 171906 / 398503 Next

Computing sd across an array with missing values

It just so happens that I created a vectorized SD function the other
day. See the column and row versions below. If there are any
rows/columns with only one non-NA value, it will return NaN.

col_sd = function(x){
	dimx = dim(x)
	x.mean = .Internal(colMeans(x,dimx[1],dimx[2],na.rm=TRUE))
	err = t(t(x)-x.mean)
	err.sq = err*err
	sum.err.sq = .Internal(colSums(err.sq,dimx[1],dimx[2],na.rm=TRUE))
	n = .Internal(colSums(!is.na(x),dimx[1],dimx[2],na.rm=TRUE))
	sqrt(sum.err.sq/(n-1))
}

row_sd = function(x){
	dimx = dim(x)
	x.mean = .Internal(rowMeans(x,dimx[1],dimx[2],na.rm=TRUE))
	err = x-x.mean
	err.sq = err*err
	sum.err.sq = .Internal(rowSums(err.sq,dimx[1],dimx[2],na.rm=TRUE))
	n = .Internal(rowSums(!is.na(x),dimx[1],dimx[2],na.rm=TRUE))
	sqrt(sum.err.sq/(n-1))
}


On Wed, Feb 25, 2009 at 5:11 PM, Jorge Ivan Velez
<jorgeivanvelez at gmail.com> wrote: