Hi:
This is kind of kludgy, but if the matrix and parallel vector are both
numeric, you could try something like
A - matrix(rnorm(12), nrow = 3)
v - 1:3
f - function(x) c(sum(x[-length(x)]^2), x[length(x)])
t(apply(cbind(A, v), 1, f))
v
[1,] 8.196513 1
[2,] 1.414914 2
[3,] 2.436660 3
From your description, it may just be easier to cbind the vector to the
matrix and then write your function for a single vector input.
If each column of the (combined) matrix represents a different parameter of
some function, then you could write a function using the column names as
arguments and use the mdply() function in package plyr as
# library(plyr)
mdply(m, fun)
where each row of m provides a set of arguments to the function. The
sequence in which the columns of m appear should match the order in which
they appear in the function. Here's a toy example to illustrate:
u - as.data.frame(matrix(rpois(9, 5), nrow = 3))
u
V1 V2 V3
1 9 6 7
2 11 3 4
3 5 11 6
names(u) - c('x', 'y', 'z')
w - cbind(u, v) # using v from above
f - function(x, y, z, v) 2 * x + y + z - v
mdply(w, f)
x y z v V1
1 9 6 7 1 30
2 11 3 4 2 27
3 5 11 6 3 24
HTH,
Dennis
On Fri, Nov 12, 2010 at 5:46 AM, Claudia Beleites cbelei...@units.itwrote:
Dear list,
I'm stuck with looking for a function of the *apply family, which I suppose
exists already just I can't find it:
What I'm looking for is somewhere between sweep and mapply that does a
calculation vectorized over a matrix and a vector:
It should work complementary to sweep: for each row of the matrix, a
different value of the vector should be handed over.
Close to mapply because I need to go through different variables in a
parallel fashion (at the moment a matrix and a vector).
Kind of a mapply that hands over array slices.
Maybe it is easiest with an example. This loop does what I want, but
A - matrix (rnorm (12), 3)
A
[,1][,2][,3] [,4]
[1,] 0.1286 0.2888 -0.4435 -0.90966
[2,] -1.6000 -1.0884 1.3736 0.07754
[3,] 0.4581 1.5413 0.6133 -0.12131
v - 1 : 3
f - function (x, y) { # some function depending on vector x and skalar y
+c (sum (x^2), y)
+ }
result - matrix (NA, nrow = nrow (A), ncol = 2)
for (r in 1 : nrow (A))
+result [r,] - f (A [r,], v [r])
result
[,1] [,2]
[1,] 1.1241
[2,] 5.6372
[3,] 2.9763
The matrix will easily be in the range of 1e4 - 1e5 rows x 1e2 - 1e3
columns, so I do not want to split it into a list and combine it afterwards.
The reason why I ask for a function is partly also because I want to
overload the functionality for a specific class and I don't think it's a
good idea to invent a name for something that probably already exists.
If this function does not exist, any ideas how I should call it?
Thanks a lot,
Claudia
--
Claudia Beleites
Dipartimento dei Materiali e delle Risorse Naturali
Università degli Studi di Trieste
Via Alfonso Valerio 6/a
I-34127 Trieste
phone: +39 0 40 5 58-37 68
email: cbelei...@units.it
__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
[[alternative HTML version deleted]]
__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.