Antoine Fabri
2020-Nov-13 14:15 UTC
[Rd] exists, get and get0 accept silently inputs of length > 1
Dear R-devel, The doc of exists, get and get0 is unambiguous, x should be an object given as a character string. However these accept longer inputs. It can lead an uncareful user to think these functions are vectorized when they're not, and generally lets through bugs that one might have preferred to trigger earlier failure. ``` r exists("d") #> [1] FALSE exists(c("c", "d")) #> [1] TRUE get(c("c", "d")) #> function (...) .Primitive("c") get0(c("c", "d")) #> function (...) .Primitive("c") ``` I believe these should either fail, or be vectorized, probably the former. Thanks, Antoine [[alternative HTML version deleted]]
iuke-tier@ey m@iii@g oii uiow@@edu
2020-Nov-13 14:33 UTC
[Rd] [External] exists, get and get0 accept silently inputs of length > 1
Worth looking into. It would probably cause some check failures, so would probably be a good idea to run a check across BIOC/CRAN. At the same time it would be worth allowing name objects (type "symbol") so thee don't have to be converted to character for the call and then back to names internally for the environment lookup. Best, luke On Fri, 13 Nov 2020, Antoine Fabri wrote:> Dear R-devel, > > The doc of exists, get and get0 is unambiguous, x should be an object given > as a character string. However these accept longer inputs. It can lead an > uncareful user to think these functions are vectorized when they're not, > and generally lets through bugs that one might have preferred to trigger > earlier failure. > > ``` r > exists("d") > #> [1] FALSE > exists(c("c", "d")) > #> [1] TRUE > get(c("c", "d")) > #> function (...) .Primitive("c") > get0(c("c", "d")) > #> function (...) .Primitive("c") > ``` > > I believe these should either fail, or be vectorized, probably the former. > > Thanks, > > Antoine > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >-- Luke Tierney Ralph E. Wareham Professor of Mathematical Sciences University of Iowa Phone: 319-335-3386 Department of Statistics and Fax: 319-335-3017 Actuarial Science 241 Schaeffer Hall email: luke-tierney at uiowa.edu Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu
Hugh Parsonage
2020-Nov-17 01:30 UTC
[Rd] [External] exists, get and get0 accept silently inputs of length > 1
I noticed the recent commit to R-dev (r79434). Is this wise? I've often used get() in constructions like for (j in ls()) if (is.numeric(x <- get(j))) ... (and often interactively, rather than in a package) Am I to understand that get(j) will now be equivalent to `j` even if j is a string referring putatively to another object? On Sat, 14 Nov 2020 at 01:34, <luke-tierney at uiowa.edu> wrote:> > Worth looking into. It would probably cause some check failures, so > would probably be a good idea to run a check across BIOC/CRAN. At the > same time it would be worth allowing name objects (type "symbol") so > thee don't have to be converted to character for the call and then > back to names internally for the environment lookup. > > Best, > > luke > > On Fri, 13 Nov 2020, Antoine Fabri wrote: > > > Dear R-devel, > > > > The doc of exists, get and get0 is unambiguous, x should be an object given > > as a character string. However these accept longer inputs. It can lead an > > uncareful user to think these functions are vectorized when they're not, > > and generally lets through bugs that one might have preferred to trigger > > earlier failure. > > > > ``` r > > exists("d") > > #> [1] FALSE > > exists(c("c", "d")) > > #> [1] TRUE > > get(c("c", "d")) > > #> function (...) .Primitive("c") > > get0(c("c", "d")) > > #> function (...) .Primitive("c") > > ``` > > > > I believe these should either fail, or be vectorized, probably the former. > > > > Thanks, > > > > Antoine > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > > -- > Luke Tierney > Ralph E. Wareham Professor of Mathematical Sciences > University of Iowa Phone: 319-335-3386 > Department of Statistics and Fax: 319-335-3017 > Actuarial Science > 241 Schaeffer Hall email: luke-tierney at uiowa.edu > Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
iuke-tier@ey m@iii@g oii uiow@@edu
2020-Nov-23 20:50 UTC
[Rd] [External] exists, get and get0 accept silently inputs of length > 1
Thanks for the suggestion. In R-devel (as of r79474) exists(), get(), and get0() now signal an error if the first argument has length > 1. This will cause about 30 CRAN packages and possibly a couple of Bioconductor packages to fail under R-devel. getS3method() now also signals an error if the class argument has length > 1. Calls of the form getS2method(generic, class(x)) will now fail if class(x) has length > 1. I believe most CRAN package issues related to this change have already been resolved, but a few may remain. Best, luke On Fri, 13 Nov 2020, Antoine Fabri wrote:> Dear R-devel, > > The doc of exists, get and get0 is unambiguous, x should be an object given > as a character string. However these accept longer inputs. It can lead an > uncareful user to think these functions are vectorized when they're not, > and generally lets through bugs that one might have preferred to trigger > earlier failure. > > ``` r > exists("d") > #> [1] FALSE > exists(c("c", "d")) > #> [1] TRUE > get(c("c", "d")) > #> function (...) .Primitive("c") > get0(c("c", "d")) > #> function (...) .Primitive("c") > ``` > > I believe these should either fail, or be vectorized, probably the former. > > Thanks, > > Antoine > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >-- Luke Tierney Ralph E. Wareham Professor of Mathematical Sciences University of Iowa Phone: 319-335-3386 Department of Statistics and Fax: 319-335-3017 Actuarial Science 241 Schaeffer Hall email: luke-tierney at uiowa.edu Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu
Reasonably Related Threads
- [External] exists, get and get0 accept silently inputs of length > 1
- [External] exists, get and get0 accept silently inputs of length > 1
- [External] exists, get and get0 accept silently inputs of length > 1
- [External] exists, get and get0 accept silently inputs of length > 1
- RFC: getifexists() {was [Bug 16065] "exists" ...}