So how would I get the following to work? > aa<-1 > aa [1] 1 > 'foo<-' <- function(x,value) x<-value > foo(aa)<-1:10 > aa [1] 1 2 3 4 5 6 7 8 9 10 > # This doesn't work: > foo(aa)[4:5] <- c(101,102) Error in foo(aa)[4:5] <- c(101, 102) : could not find function "foo" > # What I would like to see is: aa becomes 1 2 3 101 102 6 7 8 9 10 > # Is it possible to define such a function 'foo'?
Sent from my iPhone On Jul 10, 2013, at 4:10 PM, Bert Gunter <gunter.ber...@gene.com> wrote: I think the OP may perhaps want to define a method for "[<-" . e.g. try: methods("[<-") If this is not it ... ?? Cheers, Bert On Wed, Jul 10, 2013 at 12:51 PM, David Winsemius <dwinsem...@comcast.net> wrote: > > On Jul 10, 2013, at 12:17 PM, Harry Mamaysky wrote: > >> As I understand it rownames(aa) returns a copy of an attribute of aa. So >> changing the value of this vector should make the change to the copy of the >> row.names attribute. I would then have to set the original row.names equal >> to this copy to effect the change. >> >> So my question is why "rownames(aa)[2:4] <-" changes the original attribute >> rather than its copy? > > I'm not sure how you decide that was happening. Your first paragraph seemed > correct: > > aa <- data.frame( a=1:10,b=101:110 ) > str(aa) > attributes(aa) > dput(aa) > `rownames<-` > >> trace(`rownames<-`) >> rownames(aa)[2:4] <- c('row2','row3','row4') > trace: `rownames<-`(`*tmp*`, value = c("1", "row2", "row3", "row4", > "5", "6", "7", "8", "9", "10")) > > You can see that R first builds a full length vector with the second argumens > to `rownames<-` fully expanded before doing the assignment to the 'row.names' > attribute. > >> >> And the follow on question is whether it's possible to have "f(x)[2:4] <-" >> operate in the same way for some user defined replacement function f. > > Take a look at the code: > > `row.names<-.data.frame` > > -- > David. >> >> Sent from my iPhone >> >> On Jul 10, 2013, at 3:05 PM, David Winsemius <dwinsem...@comcast.net> wrote: >> >> >> On Jul 10, 2013, at 11:47 AM, Harry Mamaysky wrote: >> >>> I know how to define replacement functions in R (i.e. âfoo<-â <- >>> function(x,value) x<-value, etc.), but how do you define replacement >>> functions that operate on subsets of arrays (i.e. how do you pass an index >>> into foo)? >>> For example, why does the following use of ârownamesâ work? >> >> `rownames` of a dataframe is a vector, so indexing with "[" and a single >> vector of indices is adequate. I cannot really tell what your conceptual >> "why"-difficulty might be. This is just assignment within a vector. That is >> not really a "replacement function operating on a subset of an array" since >> rownames are not values of the dataframe .... and it's not an "array". >> (Careful use of terms is needed here.) >> >> >>> >>>> aa <- data.frame( a=1:10,b=101:110 ) >>> >>>> aa >>> >>> a b >>> >>> 1 1 101 >>> >>> 2 2 102 >>> >>> 3 3 103 >>> >>> 4 4 104 >>> >>> 5 5 105 >>> >>> 6 6 106 >>> >>> 7 7 107 >>> >>> 8 8 108 >>> >>> 9 9 109 >>> >>> 10 10 110 >>> >>>> rownames(aa)[2:4] <- c('row2','row3','row4') >>> >>>> aa >>> >>> a b >>> >>> 1 1 101 >>> >>> row2 2 102 >>> >>> row3 3 103 >>> >>> row4 4 104 >>> >>> 5 5 105 >>> >>> 6 6 106 >>> >>> 7 7 107 >>> >>> 8 8 108 >>> >>> 9 9 109 >>> >>> 10 10 110 >>> >>> >>> >>> >>> Thanks, >>> >>> Harry >>> >>> >>> [[alternative HTML version deleted]] >>> >>> ______________________________________________ >>> 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 >> Alameda, CA, USA > > David Winsemius > Alameda, CA, USA > > ______________________________________________ > 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. -- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm [[alternative HTML version deleted]]
______________________________________________ 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.