[R] Unexpected behaviour of apply()

Patrick Burns pburns at pburns.seanet.com
Fri Mar 8 10:43:52 CET 2013


This is nice fodder for 'The R Inferno' -- thanks.

As Milan said, 'which' will suffice as the function.

Here is a specialized function that only returns a
list and is only implemented to work with matrices.
It should solve your current dilemma.

applyL <-
function (X, MARGIN, FUN, ...)
{
         stopifnot(length(dim(X)) == 2, length(MARGIN) == 1)

         FUN <- match.fun(FUN)
         ans <- vector("list", dim(X)[MARGIN])
         if(MARGIN == 1) {
                 for(i in seq_along(ans)) {
                         ans[[i]] <- FUN(X[i,], ...)
                 }
         } else {
                 for(i in seq_along(ans)) {
                         ans[[i]] <- FUN(X[,i], ...)
                 }
         }
         names(ans) <- dimnames(X)[[MARGIN]]
         ans
}


Pat


On 08/03/2013 08:29, Pierrick Bruneau wrote:
> Hello everyone,
>
> Considering the following code sample :
>
> ----
> indexes <- function(vec) {
>      vec <- which(vec==TRUE)
>      return(vec)
> }
> mat <- matrix(FALSE, nrow=10, ncol=10)
> mat[1,3] <- mat[3,1] <- TRUE
> ----
>
> Issuing apply(mat, 1, indexes) returns a 10-cell list, as expected.
> Now if I do:
>
> ----
> mat[1,3] <- mat[3,1] <- FALSE
> apply(mat, 1, indexes)
> ----
>
> I would expect a 10-cell list with integer(0) in each cell - instead I get
> integer(0), which wrecks my further process.
> Is there a simple way to get the result I expect (and the only consistent
> one, IMHO) ?
>
> Thanks by advance for your help,
>
> Pierrick Bruneau
> http://www.bruneau44.com
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>

-- 
Patrick Burns
pburns at pburns.seanet.com
twitter: @burnsstat @portfolioprobe
http://www.portfolioprobe.com/blog
http://www.burns-stat.com
(home of:
  'Impatient R'
  'The R Inferno'
  'Tao Te Programming')



More information about the R-help mailing list