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

Reply via email to