[R] Naming elements of a list

Richard.Cotton at hsl.gov.uk Richard.Cotton at hsl.gov.uk
Thu Nov 22 12:33:16 CET 2007


Thomas,

> I have a numeric vector of lenth 1. I am trying to use it inside
> a function just by giving its name, rather than specifying it as
> an argument to the function. I am aware that there is an attach
> function which you need to call. The attach function will accept a
> list. However, I don't seem to be able to create the list properly. (Or 
> should I use a frame instead?)
> 
> free_driver <- function (){
> i <- numeric (1)
> attach (as.list (i))
> i <- 25
> 
> free_test ()
> 
> }
> free_test <- function (){
> print ("i =")
> print (i)
> return ()
> 
> }

Your code can be written more simply as:

free_test <- function (){cat("i =\n", i, "\n")}
free_driver <- function(){i=25;free_test()}
free_driver()

The scoping rules of R mean that the function free_test can see all the 
variables declared in free_driver.  Your code _may_ be more robust if you 
pass the variable to the function where it is used though.  At the moment, 
if you called free_test from somewhere other than free_driver (where i has 
not been declared) you will get an error.

> Is there an easy way to name all elements of a list?

Yes.  Try:

mylist <- list(a=1:5, b=letters[1:4])
mylist["a"]
mylist$b
attach(mylist)
a
b
detach(mylist)

See the help page for list for more examples.

Regards,
Richie.

Mathematical Sciences Unit
HSL

------------------------------------------------------------------------
ATTENTION:

This message contains privileged and confidential inform...{{dropped:20}}



More information about the R-help mailing list