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. 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