It can be informative to look at what the actual functions being discussed do.
Dim is an internal, meaning written in some variant of C, perhaps:
> dim
function (x) .Primitive("dim")
The function nrow, in my distribution, actually just calls dim() and throws
away one dimension:
> nrow
function (x)
dim(x)[1L]
<bytecode: 0x0000022df4d6f348>
<environment: namespace:base>
The function row is a bit related in calling dim in one of several ways:
> row
function (x, as.factor = FALSE)
{
if (as.factor) {
labs <- rownames(x, do.NULL = FALSE, prefix = "")
res <- factor(.Internal(row(dim(x))), labels = labs)
dim(res) <- dim(x)
res
}
else .Internal(row(dim(x)))
}
<bytecode: 0x0000022d87fbfb98>
<environment: namespace:base>
Does this shed any light on why the result may be inconsistent?
-----Original Message-----
From: R-devel <[email protected]> On Behalf Of Marc Schwartz via
R-devel
Sent: Sunday, September 8, 2024 8:27 AM
To: Gabor Grothendieck <[email protected]>; [email protected]
Subject: Re: [Rd] Inconsistency between row and nrow
Hi Gabor,
In strictly reading the help files for both nrow() and row(), the 'x' argument
in the former case is "a vector, array, data frame, or NULL.", whereas in the
latter case it is "a matrix-like object, that is one with a two-dimensional
dim.".
Thus, I would expect row() to fail on a >= 3-dimensional array, as your example
shows.
In reading the help file for slice.index(), there is the following in the See
Also section:
"row and col for determining row and column indexes; in fact, these are special
cases of slice.index corresponding to MARGIN equal to 1 and 2, respectively
when x is a matrix."
further differentiating the behavior of row() and col() as more specific
implementations in the 2-dimensional case.
To my read then, the difference in behavior appears to be intentional and
expected.
Regards,
Marc Schwartz
-----Original Message-----
From: R-devel <[email protected]
<mailto:[email protected]>> on behalf of Gabor Grothendieck
<[email protected] <mailto:[email protected]>>
Date: Sunday, September 8, 2024 at 7:31 AM
To: "[email protected] <mailto:[email protected]>"
<[email protected] <mailto:[email protected]>>
Subject: [Rd] Inconsistency between row and nrow
In the following nrow provides the expected result but row gives an
error. I would have thought that they would both work or both fail.
aa <- array(dim = 5:3)
nrow(aa)
## [1] 5
row(aa)
## Error in row(aa) : a matrix-like object is required as argument to 'row'
# this does work:
slice.index(aa, 1)
--
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com
______________________________________________
[email protected] <mailto:[email protected]> mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
<https://stat.ethz.ch/mailman/listinfo/r-devel>
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel