[R] making custom function compute/return multiple items
Peter Dalgaard
p.dalgaard at biostat.ku.dk
Sat Sep 25 23:53:06 CEST 2004
chumpy town <chumpytown at gmail.com> writes:
> Hello, I'm relatively new to R. I've read the intro guide, but I
> can't quite figure out how to:
>
> I have a function:
>
> Jcost <- function (theta, in, out) {
> a <- output - input %*% theta
> 1/2 * t(a) %*% a
> }
>
> where
> "theta" is a 2x1 matrix
> "in" is a 20x2 matrix
> "out" is a 20x1 matrix
> return value is a scaler
>
> This works well when I only want to compute given 1 theta matrix. How
> do I compute several (say N) 2x1 theta matrices and get back N scaler
> values?
>
> Thanks!
Two tricks:
(A) You can't do this
> matrix(1:10,10,1)-matrix(1:20,10,2)
Error in matrix(1:10, 10, 1) - matrix(1:20, 10, 2) :
non-conformable arrays
but you can do this (vector recycling)
> as.vector(matrix(1:10,10,1))-matrix(1:20,10,2)
[,1] [,2]
[1,] 0 -10
[2,] 0 -10
[3,] 0 -10
[4,] 0 -10
[5,] 0 -10
[6,] 0 -10
[7,] 0 -10
[8,] 0 -10
[9,] 0 -10
[10,] 0 -10
so if you put your theta vectors into a 2xN matrix you can get a 20xN
"a" matrix.
(B) If "a" has more than one column, you can use diag(t(a)%*%a) to get
the N scalars that you want, but that computes all the cross-products
unnecessarily. It will be much better to use colSums(a^2).
--
O__ ---- Peter Dalgaard Blegdamsvej 3
c/ /'_ --- Dept. of Biostatistics 2200 Cph. N
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
More information about the R-help
mailing list