[R] Accesing the name of an assigned object in a function
Gabor Grothendieck
ggrothendieck at myway.com
Wed Sep 1 17:57:30 CEST 2004
Arne Henningsen <ahenningsen <at> email.uni-kiel.de> writes:
>
> Hi Hendrik,
>
> if I understand you right, match.call() can help you.
>
> All the best,
> Arne
>
> On Wednesday 01 September 2004 12:13, Henrik Andersson wrote:
> > I want to use the name that I assign to an object in the function that
> > produces the output, somewhat like below:
> >
> > stupid.function <- function(input){
> > [body]
> > cat("Summarized output is ", output$summary, "Full output is given
> > by typing", assigned.name, "\n")
> > }
> >
> > assigned.name <- stupid.function(whatever)
> >
> >
> > or another example is a function that sinks the results to a text file
> > and names it assigned.name.txt .
> >
> > I checked the help for function, <-, assign but could not find it, is it
> > possible ?
As far as I know you are going to have to pass the assigned.name to the
function although there are a number of tricks that can make this a bit
nicer. For example, run this:
example(lm)
# which has the effect of defining lm.D9 which we will use for our
# examples below. Using that:
#### 1
set1 <- function(x, value) {
name <- as.character(substitute(x))
print(summary(value)$fstatistic)
cat("That was F and df. For more info type", name, "\n")
assign(name, value, parent.frame())
invisible(value)
}
set1(x, lm.D9)
x
# We can make this a bit prettier this way:
#### 2
set2 <- structure(NA,class="set2")
"[<-.set2" <- function(tmp,x,value) {
name <- as.character(substitute(x))
print(summary(value)$fstatistic)
cat("That was F and df. For more info type", name, "\n")
assign(name, value, parent.frame())
tmp
}
# now we can write:
set2[xx] <- lm.D9
xx
# Another strategy might be to use a global variable to store the
# last output from your function:
#### 3
set3 <- function(value) {
name <- as.character(substitute(x))
print(summary(value)$fstatistic)
cat("That was F and df. For more info type .set3\n")
assign(".set3", value, .GlobalEnv)
invisible(value)
}
xxx <- set3(lm.D9) # or just set3(lm.D9)
.set3
More information about the R-help
mailing list