It happened in r68597. In my example, I hadn't imported the data() function from utils; when I did that, it was fixed.
Not sure why the error is complaining about the envir argument. Duncan Murdoch On 13/07/2015 6:47 PM, John Fox wrote: > 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