On Oct 13, 2010, at 2:19 PM, Jon Zadra wrote:

Hi,

I've looked all over for a solution to this, but haven't had much look in specifying what I want to do with appropriate search terms. Thus I'm turning to R-help.

In the process of trying to write a simple function to rename individual column names in a data frame, I ran into the following problem: When I rename the columns within my function, I can't seem to get it to apply to the data frame in the global environment in a simple manner.

There already is a function (or perhaps a composition of two functions) that does what you ask. It's the '<-' method for names() usually invoked in its dyadic form:

names(object) <- character_vector

> df <- data.frame(one=rnorm(10), two=rnorm(10))
> names(df) <- c("three", "four")
> names(df)
[1] "three" "four"

In your case it would work like this:

> names(tempdf)[ which(names(tempdf)=="a") ] <- "g"
> names(tempdf)
[1] "g" "b"

--
David.


Given:

tempdf <- data.frame("a" = 1:6, "b" = 7:12)

#I can rename a to g this way:
names(tempdf)[names(tempdf)=="a"] <- "g"

#Wanting to simplify this for the future, I have the function:
colrename <- function(dframe, oldname, newname) {
   names(dframe)[names(dframe)==oldname] <- newname
   }

colrename(tempdf, "a", "g")

#However of course the change to tempdf stays within colrename(). I could add "return(names(dframe))" to the function and then call the function like:
#names(tempdf) <- colrename(tempdf, "a", "g")
#but at that point its not much simpler than the original:
#names(tempdf)[names(tempdf)=="a"] <- "g"

So, i'm wondering, is there a way to write code within that function so that the tempdf in the global environment gets changed? I thought of doing "names(dframe)[names(dframe)==oldname] <<- newname" but then of course it doesn't replace "dframe" with "tempdf" in the evaluation, so it seems to be a problem of looking at some variables within the function environment but others in the parent environment.

Any help is greatly appreciated.

Thanks,

Jon
--
Jon Zadra
Department of Psychology
University of Virginia
P.O. Box 400400
Charlottesville VA 22904
(434) 982-4744
email: za...@virginia.edu
<http://www.google.com/calendar/embed?src=jzadra%40gmail.com>

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to