On Oct 6, 2010, at 1:31 PM, Andrew Barr wrote:
Hi all,
I am having trouble assigning a value within a vector using a variable
defined within a function. I suspect this has something to do with
namespaces but I cannot figure it out. Please reply directly to me
if you
can help.
###begin code
#simple vector
test<-c(4,5,6)
#simple function to get a value from a vector
#works just like I would expect, has no problem indexing using the
local
function variable name "index"
getvalue<-function(index){
print(test[index])
}
getvalue(2)
But, but , but that just the "[" function.
> test<-c(4,5,6)
> `[`(test, 2)
[1] 5
#another simple function to update the value in a vector
update<-function(index){
test[index]<- 20
}
update(2)
test
#The update() function silently fails to accomplish the update
More "buts", ... that's just the "[<-" function with a constant 20 or
perhaps it's an unsuccessful effort to make one.
> test[2] <- 20 # which gets parsed to something like `[<-`(test,
2, 20)
> `[<-`(test, 2, 20)
[1] 4 20 6
> test
[1] 4 20 6
###
I don't understand why the function has no problem accessing the
value, but
cannot accomplish the assignment.
Scoping. You made an assignment inside a function and then did not
return a full object that was assignable as "test". Look what happens
if you do an assignment of the returned value of your function
> newtest <- update(2)
>
> newtest
[1] 20
I need to be able to update vectors using
index values which I pass from within a function.
Pass the object to the function and return what you want. If you want
the original to be altered, then do it like:
test <- modfn(test) # which is slightly more general than `[<-`(test,
2, 20)
But do it with:
.
.
return(test) }
at the end of the operations, i.e., return the full object, not just
its second element.
Thanks for your help.
Andrew Barr
--
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.