[R] how to pass object "members" in functions
Barry Rowlingson
b.rowlingson at lancaster.ac.uk
Wed Dec 22 13:11:59 CET 2010
On Wed, Dec 22, 2010 at 11:20 AM, Paul Rigor <pryce at ucla.edu> wrote:
> Hello,
> This is an R-syntax question when attempting to manipulate/access objects
> when passed to a function.
>
> I have a function attempting to just print values attached to an argument
> object. For example,
>
> printThis <- function(obj, parm2, parm3) {
> print(obj.stuff1)
> print(obj.stuff2)
> }
>
> where I've assigned stuff1 and stuff2 to the actual object passed as such
>
> actualObject.stuff1 <- c("list","of","something")
> actualObject.stuff2 <- c("list","of","something other thing")
> printThis(actualObject) # actual call to the function above
>
>
> But I'm getting the following error when calling the printThis method on
> actualObject.
> "object 'obj.stuff1' not found"
>
> How do I access all objects attached to a variable. I think I'm
> misunderstanding this "." (dot) where it's most likely just an acceptable
> way of naming variables in R.
>
> So what's the best way to create an object such that I can access what I've
> assumed to be object properties?
Yes, dot is just an allowed character in a variable name - it doesnt
have the magical powers it has in Python or C or C++. You've created
two objects called 'actualObject.stuff1' and 'actualObject.stuff2'
The nearest equivalent to a C struct would probably be a list with named parts:
foo = list(a=1, b=2)
foo$a
foo$b
or you need to look at the object-oriented systems in R. Be warned
that OO in R isn't much like OO in many other languages - there's at
least 3 fairly incompatible ways of doing it for starters....
Note that R objects are passed-by-value so:
foo = list(a=1,b=2)
bar = function(z){
z$a=999
}
bar(foo)
will leave foo unchanged.
Barry
More information about the R-help
mailing list