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.it>wrote: > 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.124 1 > [2,] 5.637 2 > [3,] 2.976 3 > > 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.