> On Jun 8, 2018, at 1:49 PM, Hadley Wickham <h.wick...@gmail.com> wrote:
> 
> Hmmm, yes, there must be some special case in the C code to avoid
> recycling a length-1 logical vector:


Here is a version that (I think) handles Herve's issue of arrays having one or 
more 0 dimensions.

subset_ROW <-
    function(x,i)
{
    dims <- dim(x)
    index_list <- which(dims[-1] != 0L) + 3
    mc <- quote(x[i])
    nd <- max(1L, length(dims))
    mc[ index_list ] <- list(TRUE)
    mc[[ nd + 3L ]] <- FALSE
    names( mc )[ nd+3L ] <- "drop"
    eval(mc)
}

Curiously enough the timing is *much* better for this implementation than for 
the first version I sent.

Constructing a version of `mc' that looks like `x[i,,,,drop=FALSE]' can be done 
with `alist(a=)' in place of `list(TRUE)' in the earlier version but seems to 
slow things down noticeably. It requires almost twice (!!) as much time as the 
version above.

Best,

Chuck
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to