From m@ech|er @end|ng |rom @t@t@m@th@ethz@ch  Mon Nov 18 12:15:38 2019
From: m@ech|er @end|ng |rom @t@t@m@th@ethz@ch (Martin Maechler)
Date: Mon, 18 Nov 2019 12:15:38 +0100
Subject: [Rd] 
 Inappropriate class(o)[!inherits(o,"AsIs")] in get_all_vars
In-Reply-To: <1709347581.898771.1573986871851@mail.yahoo.com>
References: <1709347581.898771.1573986871851@mail.yahoo.com>
Message-ID: <24018.32090.951327.313003@stat.math.ethz.ch>

>>>>> suharto anggono--- via R-devel 
>>>>>     on Sun, 17 Nov 2019 10:34:31 +0000 writes:

    > SVN revision 77401 changes
    >         x[isM] <- lapply(x[isM], function(o) `class<-`(o, class(o)[class(o) != "AsIs"]))
    > to
    >         x[isM] <- lapply(x[isM], function(o) `class<-`(o, class(o)[!inherits(o,"AsIs")]))
    > in function 'get_all_vars' in src/library/stats/R/models.R in R devel.

    > The change is inappropriate.

    > class(o)[class(o) != "AsIs"] removes "AsIs" from class(o), giving class(o) without "AsIs".

    > On the other hand, inherits(o,"AsIs") is just a single logical value. If "AsIs" is in class(o), inherits(o,"AsIs") is TRUE. In that case, by recycling of logical index, class(o)[!inherits(o,"AsIs")] removes all elements of class(o), giving character(0).

Thank you, Suharto !

You are obviously right,  and I'm a bit embarrassed by my
overzealousness to follow my own recommendations in the  R Blog

  http://bit.ly/R_blog_class_think_2x

{*wrongly*: The recommendation was to "think again" ...}

It's a "shame" that the wrong code did not trigger any checks,
so if anybody has time... I'd be grateful for such a regression
check.

Martin



[Rd] Inappropriate class(o)[!inherits(o,"AsIs")] in get_all_vars
Martin Maechler