David -
   I think what you're looking for is something like this:

mydat = data.frame(a=c(1,2,3),b=c(5,1,4))
consolidate.fun = function(data,var1,var2,saved.max){
+    data$saved.max = apply(data[,c(var1,var2)],1,max)
+    data[,var1] = NULL
+    data[,var2] = NULL
+    data
+ }
mydat = consolidate.fun(mydat,'a','b','var.max')
mydat
  saved.max
1         5
2         6
3         3

(I changed the name of the data frame, because c is a function
name, and using it as a data frame name causes confusiion.)

The "<<-" operator only operates on complete objects, not
columns within a data frame.
                                        - Phil Spector
                                         Statistical Computing Facility
                                         Department of Statistics
                                         UC Berkeley
                                         spec...@stat.berkeley.edu




On Thu, 18 Mar 2010, David Young wrote:

Dear List,

I'm getting the error: object of type 'closure' is not subsettable
And am not sure how to get around the problem.  I've included two
short code sets below.  One that shows what I want to do and works,
but without using the function much, and another that tries to use the
function but causes the error.

# THIS WORKS AND SHOWS WHAT I'D LIKE TO DO
a <- c(1,2,3)
b <- c(5,6,0)
c <- data.frame(a,b)

# TAKES THE MAX OF TWO VARS AND SAVES IT TO A NEW VARIABLE AND DELETES OLD 
VARIABLES
consolidate.fun <- function( data, var1, var2, saved.max ) {
max <- apply( data[,c(var1, var2)], 1, max)

# THIS WORKS BUT I HAVE TO CALL THE DATA FRAME BY NAME RATHER THEN USING THE 
FUNCTION DATA NAME
c[,"var.max"] <<- max
c$a <<- NULL
c$b <<- NULL
}
consolidate.fun( data=c , var1="a", var2="b", saved.max="var.max" )
c

# THIS SHOWS THE MORE COMPLETE USE OF THE FUNCTION'S INTENT, BUT
#  CAUSES THE ERROR IN R.
a <- c(1,2,3)
b <- c(5,6,0)
c <- data.frame(a,b)

# TAKES THE MAX OF TWO VARS AND SAVES IT TO A NEW VARIABLE AND DELETES OLD 
VARIABLES
consolidate.fun <- function( data, var1, var2, saved.max ) {
max <- apply( data[,c(var1, var2)], 1, max)

# SOURCE OF ERROR.  I'VE TRIED CALLING THE DATA FRAME IN DIFFERENT
#  WAYS, BUT NONE SEEM TO WORK FOR ME.
data[, saved.max ] <<- max
data[, var1 ] <<- NULL
data[, var2 ] <<- NULL
}
consolidate.fun( data=c , var1="a", var2="b", saved.max="var.max" )
c

Any helpful comments would be appreciated.


                         mailto:dyo...@telefonica.net

______________________________________________
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.


______________________________________________
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