[R] Why does `[<-.matrix` not exist in base R

Bert Gunter bgunter@4567 @end|ng |rom gm@||@com
Mon Nov 25 03:59:48 CET 2019


Re: [<-.

It is perhaps worth noting that the OP seems "misguided" in another sense.
His complaint seems to rest on the assumption that because matrices and
data frames both have a row/column structure, certain operations on them
should be similar. I disagree. In fact, data frames and matrices are very
different structures with very different semantics and wholly different
purposes. Their "similarity" is superficial. First and foremost, (numeric)
matrices are numerical objects, the basic building blocks for linear
algebra with a whole devoted set of algebraic functionality for them (see
also: BLAS) ; while data frames are essentially data storage/manipulation
structures, internal data bases for R. As a result, imo, there is good
reason that [<-. should *not* behave with matrices as it does with data
frames: when doing complex matrix calculations, returning an error message
when indices go out of range seems much more desirable than silently
changing dimensions. Indeed, I think one might make a better argument for
doing that for data frames also, but, as it is both relativey innocuous and
convenient to add columns in that context -- the data frame method is just
a wrapper for data.frame() as the man page says -- it's not really an issue
(and certainly shouldn't be altered now).

Perhaps a moral: one should be very wary of assuming that behavior that you
think is "natural" and "desirable" would be assumed to be so by others.
Especially for long used and extensively exercised core functionality.

Cheers,
Bert

Bert Gunter

"The trouble with having an open mind is that people keep coming along and
sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Sun, Nov 24, 2019 at 6:47 AM peter dalgaard <pdalgd using gmail.com> wrote:

> The subject is misguided. It is not a problem to assign to a subset of
> columns.
>
> The issue is that the assignment operation does not want to _expand_ the
> matrix automatically upon seeing an out-of-bounds index. E.g.:
>
> > M <- matrix(0,2,2)
> > M[,3]<-1
> Error in `[<-`(`*tmp*`, , 3, value = 1) : subscript out of bounds
> > M[,2]<-1
> > M
>      [,1] [,2]
> [1,]    0    1
> [2,]    0    1
>
> You can, however, do things like this:
>
> > M <- M[,c(1,2,2)]
> > M[,3]<-3
> > M
>      [,1] [,2] [,3]
> [1,]    0    1    3
> [2,]    0    1    3
>
> -pd
>
> > On 23 Nov 2019, at 17:58 , David Disabato <ddisab01 using gmail.com> wrote:
> >
> > Whenever going from working with a data.frame to a matrix, I get annoyed
> > that I cannot assign and subset at the same time with matrices - like I
> can
> > with data.frames.
> >
> > For example, if I want to add a new column to a data.frame, I can do
> > something like `myDataFrame[, "newColumn"] <- NA`.
> >
> > However, with a matrix, this syntax does not work and I have to use a
> call
> > to `cbind` and create a new object. For example, `mymatrix2 <-
> > cbind(mymatrix, "newColumn" = NA)`.
> >
> > Is there a programming reason that base R does not have a matrix method
> for
> > `[<-` or is it something that arguably should be added?
> >
> > --
> > David J. Disabato, Ph.D.
> > Postdoctoral Research Scholar
> > Kent State University
> > ddisab01 using gmail.com
> >
> > Email is not a secure form of communication as information and
> > confidentiality cannot be guaranteed. Information provided in an email is
> > not intended to be a professional service. In the case of a crisis or
> > emergency situation, call 911.
> >
> >       [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > 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.
>
> --
> Peter Dalgaard, Professor,
> Center for Statistics, Copenhagen Business School
> Solbjerg Plads 3, 2000 Frederiksberg, Denmark
> Phone: (+45)38153501
> Office: A 4.23
> Email: pd.mes using cbs.dk  Priv: PDalgd using gmail.com
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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]]



More information about the R-help mailing list