Dear Duncan and Peter,

I've just arrived at more or less the same thing:

        foo <- function() data(package="MASS")

        bar <- function() data(package="MASS", envir=.GlobalEnv)

        baz <- function() data(package="MASS", envir=globalenv())

all trigger the note when included with the Rcmdr sources:

        * checking R code for possible problems ... NOTE
        bar: Error while checking: invalid 'envir' argument
        baz: Error while checking: invalid 'envir' argument
        foo: Error while checking: invalid 'envir' argument 

The envir argument to data() defaults to .GlobaEnv .

I hope this helps,
 John

> -----Original Message-----
> From: Duncan Murdoch [mailto:murdoch.dun...@gmail.com]
> Sent: July-13-15 6:32 PM
> To: John Fox; 'peter dalgaard'
> Cc: r-package-devel@r-project.org
> Subject: Re: [R-pkg-devel] "invalid 'envir' argument" note from R-devel
> 
> On 13/07/2015 5:23 PM, John Fox wrote:
> > Dear Peter,
> >
> >> -----Original Message-----
> >> From: peter dalgaard [mailto:pda...@gmail.com]
> >> Sent: July-13-15 4:52 PM
> >> To: John Fox
> >> Cc: r-package-devel@r-project.org
> >> Subject: Re: [R-pkg-devel] "invalid 'envir' argument" note from R-
> devel
> >>
> >> Yes, there was a similar note from Alexandra Kuznetsova a couple of
> days
> >
> > Sorry, I didn't notice that.
> >
> >> ago. Look unintentional, but it is not easy to spot what triggers it.
> If
> >> someone could cook up a minimal example, or - maybe easier given the
> >> relatively short timeframe - bisect their way to the exact svn
> revision
> >> that triggered it, it might help in getting it fixed.
> >
> > I'm afraid that I'm not set up to build R-devel and I'm about to leave
> town
> > for three weeks. I'll see if I can produce a simpler example
> triggering the
> > error, however.
> 
> Hana Sevcikova posted a simple example.  I'll bisect on it.
> 
> Here's her example:
> 
> e <- new.env()
> data("mydataset", envir=e)
> 
> I've substituted USArrests for "mydataset".
> 
> Duncan Murdoch
> 
> >
> > Thanks for this,
> >  John
> >
> >>
> >> -pd
> >>
> >>> On 13 Jul 2015, at 22:31 , John Fox <j...@mcmaster.ca> wrote:
> >>>
> >>> Dear list members,
> >>>
> >>> I'm getting a new note from R-devel that I haven't seen before when
> >> checking
> >>> the development version of the Rcmdr package:
> >>>
> >>>   * checking R code for possible problems ... NOTE
> >>>   readDataFromPackage: Error while checking: invalid 'envir' argument
> >>>
> >>> This note doesn't appear in R 3.2.1.
> >>>
> >>> My session info:
> >>>
> >>> -------- snip ----------
> >>>
> >>> R Under development (unstable) (2015-07-12 r68650)
> >>> Platform: x86_64-w64-mingw32/x64 (64-bit)
> >>> Running under: Windows 7 x64 (build 7601) Service Pack 1
> >>>
> >>> locale:
> >>> [1] LC_COLLATE=English_Canada.1252  LC_CTYPE=English_Canada.1252
> >>> LC_MONETARY=English_Canada.1252
> >>> [4] LC_NUMERIC=C                    LC_TIME=English_Canada.1252
> >>>
> >>> attached base packages:
> >>> [1] stats     graphics  grDevices utils     datasets  methods   base
> >>>
> >>> loaded via a namespace (and not attached):
> >>> [1] tools_3.3.0
> >>>
> >>> -------- snip ----------
> >>>
> >>> I can't even localize the problem in readDataFromPackage(). There
> are
> >> only
> >>> two places in this function where there's a function call with an
> >> envir
> >>> argument, and I still get the note if I comment these out. As well,
> >>> readDataFromPackage() seems to work as intended -- there is no
> obvious
> >> error
> >>> in it.
> >>>
> >>> FWIW, here's readDataFromPackage(). The complete sources for the
> >> development
> >>> version of the Rcmdr package are on R-Forge.
> >>>
> >>> -------- snip ----------
> >>>
> >>> readDataFromPackage <- function() {
> >>>   env <- environment()
> >>>   datasets <- NULL
> >>>   initializeDialog(title=gettextRcmdr("Read Data From Package"))
> >>>   dsname <- tclVar("")
> >>>   package <- NULL
> >>>   enterFrame <- tkframe(top)
> >>>   entryDsname <- ttkentry(enterFrame, width="20",
> >> textvariable=dsname)
> >>>   packages <- sort(.packages())
> >>>   packages <- packages[! packages %in% c("base", "stats")]
> >>>   packages <- packages[sapply(packages, function(package){
> >>>                                           ds <-
> >>> data(package=package)$results
> >>>                                           if (nrow(ds) == 0)
> >>> return(FALSE)
> >>>                                           ds <- ds[, "Item"]
> >>>                                           valid <- sapply(ds,
> >>> is.valid.name)
> >>>                                           length(ds[valid]) > 0
> >>>                                   })]
> >>>   packageDatasetFrame <- tkframe(top)
> >>>   packageFrame <- tkframe(packageDatasetFrame)
> >>>   max.height <- getRcmdr("variable.list.height")
> >>>   packageBox <- tklistbox(packageFrame, height=min(max.height,
> >>> length(packages)),
> >>>            exportselection="FALSE",
> >>>                   selectmode="single", background="white")
> >>>   packageScroll <- ttkscrollbar(packageFrame,
> >>>                   command=function(...) tkyview(packageBox, ...))
> >>>   tkconfigure(packageBox, yscrollcommand=function(...)
> >>> tkset(packageScroll, ...))
> >>>   for (p in packages) tkinsert(packageBox, "end", p)
> >>>   datasetFrame <- tkframe(packageDatasetFrame)
> >>>   datasetBox <- tklistbox(datasetFrame, height=max.height,
> >>> exportselection="FALSE",
> >>>                   selectmode="single", background="white")
> >>>   datasetScroll <- ttkscrollbar(datasetFrame,
> >>>                   command=function(...) tkyview(datasetBox, ...))
> >>>   tkconfigure(datasetBox, yscrollcommand=function(...)
> >>> tkset(datasetScroll, ...))
> >>>   onPackageSelect <- function(){
> >>>           assign("package",
> >>> packages[as.numeric(tkcurselection(packageBox)) + 1], envir=env)
> >>>           datasets <<- data(package=package)$results[,3]
> >>>           valid <- sapply(datasets, is.valid.name)
> >>>           datasets <<- datasets[valid]
> >>>           tkdelete(datasetBox, "0", "end")
> >>>           for (dataset in datasets) tkinsert(datasetBox, "end",
> >>> dataset)
> >>>           tkconfigure(datasetBox, height=min(max.height,
> >>> length(datasets)))
> >>>           firstChar <- tolower(substr(datasets, 1, 1))
> >>>           len <- length(datasets)
> >>>           onLetter <- function(letter){
> >>>                   letter <- tolower(letter)
> >>>                   current <- 1 +
> >>> round(as.numeric(unlist(strsplit(tclvalue(tkyview(datasetBox) ), "
> >>> "))[1])*len)
> >>>                   mat <- match(letter, firstChar[-(1:current)])
> >>>                   if (is.na(mat)) return()
> >>>                   tkyview.scroll(datasetBox, mat, "units")
> >>>           }
> >>>           onA <- function() onLetter("a")
> >>>           onB <- function() onLetter("b")
> >>>           onC <- function() onLetter("c")
> >>>           onD <- function() onLetter("d")
> >>>           onE <- function() onLetter("e")
> >>>           onF <- function() onLetter("f")
> >>>           onG <- function() onLetter("g")
> >>>           onH <- function() onLetter("h")
> >>>           onI <- function() onLetter("i")
> >>>           onJ <- function() onLetter("j")
> >>>           onK <- function() onLetter("k")
> >>>           onL <- function() onLetter("l")
> >>>           onM <- function() onLetter("m")
> >>>           onN <- function() onLetter("n")
> >>>           onO <- function() onLetter("o")
> >>>           onP <- function() onLetter("p")
> >>>           onQ <- function() onLetter("q")
> >>>           onR <- function() onLetter("r")
> >>>           onS <- function() onLetter("s")
> >>>           onT <- function() onLetter("t")
> >>>           onU <- function() onLetter("u")
> >>>           onV <- function() onLetter("v")
> >>>           onW <- function() onLetter("w")
> >>>           onX <- function() onLetter("x")
> >>>           onY <- function() onLetter("y")
> >>>           onZ <- function() onLetter("z")
> >>>           for (letter in c(letters, LETTERS)){
> >>>                   tkbind(datasetBox, paste("<", letter, ">", sep=""),
> >>>                                   get(paste("on", toupper(letter),
> >>> sep="")))
> >>>           }
> >>>           onClick <- function() tkfocus(datasetBox)
> >>>           tkbind(datasetBox, "<ButtonPress-1>", onClick)
> >>>   }
> >>>   onDatasetSelect <- function(){
> >>>           tclvalue(dsname) <-
> >>> datasets[as.numeric(tkcurselection(datasetBox)) + 1]
> >>>   }
> >>>   firstChar <- tolower(substr(packages, 1, 1))
> >>>   len <- length(packages)
> >>>   onLetter <- function(letter){
> >>>           letter <- tolower(letter)
> >>>           current <- 1 +
> >>> round(as.numeric(unlist(strsplit(tclvalue(tkyview(packageBox) ), "
> >>> "))[1])*len)
> >>>           mat <- match(letter, firstChar[-(1:current)])
> >>>           if (is.na(mat)) return()
> >>>           tkyview.scroll(packageBox, mat, "units")
> >>>   }
> >>>   onA <- function() onLetter("a")
> >>>   onB <- function() onLetter("b")
> >>>   onC <- function() onLetter("c")
> >>>   onD <- function() onLetter("d")
> >>>   onE <- function() onLetter("e")
> >>>   onF <- function() onLetter("f")
> >>>   onG <- function() onLetter("g")
> >>>   onH <- function() onLetter("h")
> >>>   onI <- function() onLetter("i")
> >>>   onJ <- function() onLetter("j")
> >>>   onK <- function() onLetter("k")
> >>>   onL <- function() onLetter("l")
> >>>   onM <- function() onLetter("m")
> >>>   onN <- function() onLetter("n")
> >>>   onO <- function() onLetter("o")
> >>>   onP <- function() onLetter("p")
> >>>   onQ <- function() onLetter("q")
> >>>   onR <- function() onLetter("r")
> >>>   onS <- function() onLetter("s")
> >>>   onT <- function() onLetter("t")
> >>>   onU <- function() onLetter("u")
> >>>   onV <- function() onLetter("v")
> >>>   onW <- function() onLetter("w")
> >>>   onX <- function() onLetter("x")
> >>>   onY <- function() onLetter("y")
> >>>   onZ <- function() onLetter("z")
> >>>   for (letter in c(letters, LETTERS)){
> >>>           tkbind(packageBox, paste("<", letter, ">", sep=""),
> >>>                           get(paste("on", toupper(letter), sep="")))
> >>>   }
> >>>   onClick <- function() tkfocus(packageBox)
> >>>   tkbind(packageBox, "<ButtonPress-1>", onClick)
> >>>   onOK <- function(){
> >>>           datasetName <-
> >>> datasets[as.numeric(tkcurselection(datasetBox)) + 1]
> >>>           dsnameValue <- tclvalue(dsname)
> >>>           if (dsnameValue != "" && is.null(package)){
> >>>                   closeDialog()
> >>>                   if (is.element(dsnameValue, listDataSets())) {
> >>>                           if ("no" ==
> >>> tclvalue(checkReplace(dsnameValue, gettextRcmdr("Data set")))){
> >>>                                   if (GrabFocus()) tkgrab.release(top)
> >>>                                   tkdestroy(top)
> >>>                                   readDataFromPackage()
> >>>                                   return()
> >>>                           }
> >>>                   }
> >>>                   save.options <- options(warn=2)
> >>>                   check <- try(eval(parse(text=logger(paste("data(",
> >>> dsnameValue, ")", sep=""))),
> >>>                                                   envir=.GlobalEnv),
> >>> silent=TRUE)
> >>>                   options(save.options)
> >>>                   if (class(check) == "try-error"){
> >>>                           errorCondition(recall=readDataFromPackage,
> >>>
> >>> message=sprintf(gettextRcmdr("Data set %s does not exit"),
> >> dsnameValue))
> >>>                           return()
> >>>                   }
> >>>                   activeDataSet(dsnameValue)
> >>>                   tkfocus(CommanderWindow())
> >>>           }
> >>>           else{
> >>>                   if (is.null(package)) {
> >>>                           errorCondition(recall=readDataFromPackage,
> >>> message=gettextRcmdr("You must select a package."))
> >>>                           return()
> >>>                   }
> >>>                   if (length(datasetName) == 0) {
> >>>                           errorCondition(recall=readDataFromPackage,
> >>> message=gettextRcmdr("You must select a data set.")    )
> >>>                           return()
> >>>                   }
> >>>                   if (is.element(datasetName, listDataSets())) {
> >>>                           if ("no" ==
> >>> tclvalue(checkReplace(datasetName, gettextRcmdr("Data set")))){
> >>>                                   if (GrabFocus()) tkgrab.release(top)
> >>>                                   tkdestroy(top)
> >>>                                   readDataFromPackage()
> >>>                                   return()
> >>>                           }
> >>>                   }
> >>>                   closeDialog()
> >>>                   command <- paste("data(", datasetName, ',
> >>> package="', package, '")', sep="")
> >>>                   result <- justDoIt(command)
> >>>                   logger(command)
> >>>                   if (class(result)[1] !=  "try-error")
> >>> activeDataSet(datasetName)
> >>>                   tkfocus(CommanderWindow())
> >>>           }
> >>>   }
> >>>   onDataHelp <- function(){
> >>>    datasetName <- datasets[as.numeric(tkcurselection(datasetBox)) +
> 1]
> >>>           dsnameValue <- tclvalue(dsname)
> >>>           if (dsnameValue == "") dsnameValue <- datasetName
> >>>           if (length(dsnameValue) == 0) Message(gettextRcmdr("No data
> >>> set selected."), type="warning")
> >>>           else if (is.null(package)) doItAndPrint(paste('help("',
> >>> dsnameValue, '")', sep=""))
> >>>           else doItAndPrint(paste('help("', dsnameValue, '",
> >>> package="', package, '")', sep=""))
> >>>   }
> >>>   OKCancelHelp(helpSubject="data")
> >>>   dataHelpButton <- buttonRcmdr(top, text=gettextRcmdr("Help on
> >>> selected data set"), command=onDataHelp)
> >>>   tkgrid(labelRcmdr(packageDatasetFrame, text=gettextRcmdr("Package
> >>> (Double-click to select)"), fg=getRcmdr("title.color"),
> >>> font="RcmdrTitleFont"),
> >>>                   labelRcmdr(packageDatasetFrame, text="   "),
> >>> labelRcmdr(packageDatasetFrame, text=gettextRcmdr("Data set (Double-
> >> click to
> >>> select)"),
> >>>                                   fg=getRcmdr("title.color"),
> >>> font="RcmdrTitleFont"), sticky="w")
> >>>   tkgrid(packageBox, packageScroll, sticky="nw")
> >>>   tkgrid(datasetBox, datasetScroll, sticky="nw")
> >>>   tkgrid(packageFrame, labelRcmdr(packageDatasetFrame, text="   "),
> >>> datasetFrame, sticky="nw")
> >>>   tkgrid(packageDatasetFrame, sticky="w")
> >>>   tkgrid(labelRcmdr(top, text=gettextRcmdr("OR"), fg="red"),
> >>> sticky="w")
> >>>   tkgrid(labelRcmdr(enterFrame, text=gettextRcmdr("Enter name of data
> >>> set:  "), fg=getRcmdr("title.color"), font="RcmdrTitleFont"),
> >> entryDsname,
> >>> sticky="w")
> >>>   tkgrid(enterFrame, sticky="w")
> >>>   tkgrid(dataHelpButton, sticky="w")
> >>>   tkgrid(buttonsFrame, sticky="ew")
> >>>   tkgrid.configure(packageScroll, sticky="ns")
> >>>   tkgrid.configure(datasetScroll, sticky="ns")
> >>>   tkbind(packageBox, "<Double-ButtonPress-1>", onPackageSelect)
> >>>   tkbind(datasetBox, "<Double-ButtonPress-1>", onDatasetSelect)
> >>>   dialogSuffix(focus=entryDsname)
> >>> }
> >>>
> >>> -------- snip ----------
> >>>
> >>> Any insight into the problem would be appreciated.
> >>>
> >>> Thanks,
> >>> John
> >>>
> >>> -----------------------------------------------
> >>> John Fox, Professor
> >>> McMaster University
> >>> Hamilton, Ontario, Canada
> >>> http://socserv.socsci.mcmaster.ca/jfox/
> >>>
> >>>
> >>>
> >>>
> >>> ---
> >>> This email has been checked for viruses by Avast antivirus software.
> >>> https://www.avast.com/antivirus
> >>>
> >>> ______________________________________________
> >>> R-package-devel@r-project.org mailing list
> >>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
> >>
> >> --
> >> Peter Dalgaard, Professor,
> >> Center for Statistics, Copenhagen Business School
> >> Solbjerg Plads 3, 2000 Frederiksberg, Denmark
> >> Phone: (+45)38153501
> >> Email: pd....@cbs.dk  Priv: pda...@gmail.com
> >>
> >>
> >>
> >>
> >>
> >>
> >
> >
> >
> > ---
> > This email has been checked for viruses by Avast antivirus software.
> > https://www.avast.com/antivirus
> >
> > ______________________________________________
> > R-package-devel@r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-package-devel
> >


---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to