Let\'s say I have a matrix, mat.
mat <- matrix(1:5, nrow = 10, ncol = 3, byrow = TRUE)
And I have some sort of function that I want to apply
In this specific case, just roll the "est" values out to a matrix that matches the "true" values. Then you can subtract matrices (which R will automatically do componentwise) and use apply()
, or here, colMeans()
:
> true <- matrix(1:5, nrow = 10, ncol = 3, byrow = TRUE)
> est <- matrix(1:3,nrow=nrow(true),ncol=ncol(true),byrow=TRUE)
> sqrt(colMeans((true-est)^2))
[1] 2.449490 1.732051 1.414214
>
In more general cases involving lists, mapply()
may be helpful.
You could use mapply
where x
would be your matrix column, and y
the constant. I didn't bother with converting the matrix into a list the smart way, so I have to use unlist
inside the function.
mat <- matrix(1:5, nrow = 10, ncol = 3, byrow = TRUE)
mat.list <- apply(mat, MARGIN = 2, FUN = list)
mapply(FUN = function(x, y) {
sqrt(mean((unlist(x) - y)^2))
}, x = mat.list, y = list(1, 2, 3))
[1] 2.449490 1.732051 1.414214