From hp@ge@ @ending from fredhutch@org  Tue Jul  3 00:42:35 2018
From: hp@ge@ @ending from fredhutch@org (=?UTF-8?B?SGVydsOpIFBhZ8Oocw==?=)
Date: Mon, 2 Jul 2018 15:42:35 -0700
Subject: [Rd] MARGIN in base::unique.matrix() and base::unique.array()
Message-ID: <ca23524c-1c26-1ef1-8a26-998effd78219@fredhutch.org>

Hi,

The man page for base::unique.matrix() and base::unique.array() says
that MARGIN is expected to be a single integer. OTOH the code in charge
of checking the user supplied MARGIN is:

     if (length(MARGIN) > ndim || any(MARGIN > ndim))
         stop(gettextf("MARGIN = %d is invalid for dim = %d",
             MARGIN, dx), domain = NA)

which doesn't really make sense.

As a consequence the user gets an obscure error message when specifying
a MARGIN that satisfies the above check but is in fact invalid:

   > unique(matrix(1:10, ncol=2), MARGIN=1:2)
   Error in args[[MARGIN]] <- !duplicated.default(temp, fromLast = 
fromLast,  :
     object of type 'symbol' is not subsettable

Also the code used by the above check to generate the error message
is broken:

   > unique(matrix(1:10, ncol=2), MARGIN=1:3)
   Error in sprintf(gettext(fmt, domain = domain), ...) :
     arguments cannot be recycled to the same length

   > unique(matrix(1:10, ncol=2), MARGIN=3)
   Error in unique.matrix(matrix(1:10, ncol = 2), MARGIN = 3) :
     c("MARGIN = 3 is invalid for dim = 5", "MARGIN = 3 is invalid for 
dim = 2")

Thanks,
H.

-- 
Herv? Pag?s

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: hpages at fredhutch.org
Phone:  (206) 667-5791
Fax:    (206) 667-1319



[Rd] MARGIN in base::unique.matrix() and base::unique.array()
=?UTF-8?B?SGVydsOpIFBhZ8Oocw==?=