Dear list members,

I and my students have encountered an intermittent problem using the Rcmdr package (version 0.9-0) under Windows (with the SDI). The problem occurs both in versions 1.7.1 and 1.8.0 of R.

The problem seems to occur only in the following context: The "Edit data set" button is pressed in the Rcmdr GUI. This executes the fix() function on the active data frame, bringing up a data editor window. After changing variable names in the data editor, the editor is closed by the user. This causes the active data frame to be detached and re-attached. That is, this is what happens when things work normally. Frequently, however, Rgui.exe crashes at this point, reporting a "program error."

I suspect that there some kind of timing problem, but before I experiment further, I wonder whether anyone has any more specific ideas.

To be supply some more details, the "Edit data set" button executes the following code:

    onEdit <- function(){
        command <- paste("fix(", .activeDataSet, ")", sep="")
        logger(command)
        justDoIt(command)
        activeDataSet(.activeDataSet)
        tkwm.deiconify(.commander)
        tkfocus(.commander)
        }

where .activeDataSet is a (global) character variable containing the name of the "active" data frame, logger() just echoes the command to the R console

logger <- function(command){
    if (tclvalue(.logCommands) == "1") {
        tkinsert(.log, "end", paste(command,"\n", sep=""))
        tkyview.moveto(.log, 1)
        }
    lines <- strsplit(command, "\n")[[1]]
    for (line in lines) cat(paste("\nR-cmdr>", line, "\n"))
    command
    }


and JustDoIt() is defined as follows:


justDoIt <- function(command) {
    result <- try(eval(parse(text=command), envir=.GlobalEnv), silent=TRUE)
    if (class(result)[1] ==  "try-error"){
        tkmessageBox(message=paste("Error:",
            strsplit(result, ":")[[1]][2]), icon="error")
        tkfocus(.commander)
        return()
        }
    result
    }

The function activeDataSet() has the following definition (but I doubt that the problem is there, since Rcmdr uses this function a lot and I've not observed a problem in any other context):

activeDataSet <- function(dsname){
if (missing(dsname)) {
if (is.null(.activeDataSet)){
tkmessageBox(message="There is no active data set.", icon="error", type="ok")
return(FALSE)
}
else return(.activeDataSet)
}
if (!is.data.frame(get(dsname, envir=.GlobalEnv))){
tkmessageBox(message=paste(dsname, " is not a data frame and cannot be attached.",
sep=""), icon="error", type="ok")
tkfocus(.commander)
return()
}
if (!is.null(.activeDataSet) && (tclvalue(.attachDataSet) == "1")
&& (length(grep(.activeDataSet, search())) !=0)) {
detach(pos = match(.activeDataSet, search()))
logger(paste("detach(", .activeDataSet, ")", sep=""))
}
assign(".activeDataSet", dsname, envir=.GlobalEnv)
assign(".variables", listVariables(), envir=.GlobalEnv)
assign(".numeric", listNumeric(), envir=.GlobalEnv)
assign(".factors", listFactors(), envir=.GlobalEnv)
assign(".twoLevelFactors", listTwoLevelFactors(), envir=.GlobalEnv)
tclvalue(.dataSetName) <- paste(.activeDataSet, " ")
tkconfigure(.dataSetLabel, fg="blue")
if (tclvalue(.attachDataSet) == "1"){
attach(get(dsname, envir=.GlobalEnv), name=dsname)
logger(paste("attach(", dsname, ")", sep=""))
}
dsname
}


Any help would be greatly appreciated.

John
-----------------------------------------------------
John Fox
Department of Sociology
McMaster University
Hamilton, Ontario, Canada L8S 4M4
email: [EMAIL PROTECTED]
phone: 905-525-9140x23604
web: www.socsci.mcmaster.ca/jfox

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-devel

Reply via email to