[R] locked binding of setwd() in R 2.15.x causes .Rprofile to fail

Michael Friendly friendly at yorku.ca
Mon Jul 30 17:10:45 CEST 2012


[Env: Win XP, R 2.14.2, R 2.15.0]

I have a replacement function for setwd() in my .Rprofile which displays 
the current R path in the R window
title. It no longer works in R 2.15.x, giving the error below. Worse, 
the error prevents the rest of my
.Rprofile script from completing.

Is there some way to rescue this, i.e., preserve this behavior in
R 2.15? If not, how can I modify my script so it will still work under R 
2.14.2 and not fail under R 2.15?

Error in utils::assignInNamespace("setwd", function(dir) { :
locked binding of ‘setwd’ cannot be changed

######################
#-- functions from .Rprofile
# modify setwd() to also show the current path in the window title
# assigns .lastdir in the global environment
local({
oldsetwd <- setwd
utils::assignInNamespace("setwd",
function(dir) {
.lastdir <<- oldsetwd(dir)
utils::setWindowTitle( short.path(base::getwd()) )
.lastdir
}, "base")
})

# setwd replacement, allowing cd() to be like 'cd -' on unix (return to 
last dir)
cd <- function(dir) {
if(missing(dir)) dir <- .lastdir
.lastdir <<- base::setwd(dir)
utils::setWindowTitle( short.path(base::getwd()) )
}

short.path <- function(dir, len=2) {
np <-length(parts <- unlist(strsplit(dir, '/')))
parts <-rev( rev(parts)[1:min(np,len)] )
dots <- ifelse (np>len, '...', '')
paste(dots,paste(parts, '/', sep='', collapse=''))
}

-- 
Michael Friendly     Email: friendly AT yorku DOT ca
Professor, Psychology Dept.
York University      Voice: 416 736-5115 x66249 Fax: 416 736-5814
4700 Keele Street    Web:   http://www.datavis.ca
Toronto, ONT  M3J 1P3 CANADA



More information about the R-help mailing list