suh@rto_@@ggo@o m@iii@g oii y@hoo@com
2019-Nov-17 10:34 UTC
[Rd] Inappropriate class(o)[!inherits(o,"AsIs")] in get_all_vars
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).
Martin Maechler
2019-Nov-18 11:15 UTC
[Rd] Inappropriate class(o)[!inherits(o,"AsIs")] in get_all_vars
>>>>> 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
Martin Maechler
2019-Nov-18 13:12 UTC
[Rd] Inappropriate class(o)[!inherits(o,"AsIs")] in get_all_vars
>>>>> Martin Maechler >>>>> on Mon, 18 Nov 2019 12:15:38 +0100 writes:>>>>> 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. Once I started thinking, it was easy to modify the previous reg.check to trigger in the case of the erronous r77401. Fixed now in 77435. Martin