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

Reply via email to