Accesing the name of an assigned object in a function
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