Dear all, Dear Keith,

Well, of course in fact the problem is more complicated than that. The example was just for illustration.

I have several statistical models for which I want to retrieve predictions using delta.method (from library(alr3)).

Now for this I need a character string such as e.g.
delta.method(model, "a + exp(c * x)") # model could for example be an 
exponential nls fit

where the "x" shall be replaced by a numeric value at which the predictions 
plus s.e. shall be returned:

delta.method(model, "a + exp(c * 10)")

##

Because there are many models for which this shall be done, I would like to have a function that does something like the following:

extract.estimates=function(model.list,xval)
for (i in 1:length(model.list)){
mod=model.list[i]

- extract the model formula using formula(mod)
- every time the variable "x" is present, it shall be replaced by xval
- create a pasted character string "pastestring" to be used by delta.method

result=list(delta.method(mod,pastestring))
return(result)
}

I hope this has helped illustrating my point.

All the best
Christoph




Keith Jewell schrieb:
Hi,

Firstly, I'd recommend using '<-' for assignment, rather than '='; it saves confusion Secondly, I don't think you want 'a*x+b' as a formula, I think you want an expression.
Thirdly, your 'y' has only one term, a 9 character constant = "a * x + b"

Consider instead,
y <- expression(a*x+b)
a <- 2
b <- 3
x <- 1:10
y
eval(y)

Now, how to replace 'x' by 'w'?
I'm not an expert, but this is the kind of thing I need to do, so I'd welcome criticism of my approach.
I would view the expression as a list:
as.list(y)
as.list(y[[1]])

So y is an expression containing a sub-expression; that is y is  '(a*x) + b'
You want to access the sub-expression 'a*x'
y[[1]][[2]]
as.list(y[[1]][[2]])

Now you want to replace the third item in that sub-expression with the name (not the character) w
y[[1]][[2]][[3]] <- as.name("w")
w <- 11:20
y
eval(y)

hth

Keith J

P.S. Perhaps you really do want a formula; y ~ a*x+b ??
In that case I'd still probably manipulate it as a list.
-------------------------------------------
"Christoph Scherber" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
Dear all,

How can I replace text in objects that are of class "formula"?

y="a * x + b"
class(y)="formula"
grep("x",y)
y[1]

Suppose I would like to replace the "x" by "w" in the formula object "y".

How can this be done? Somehow, the methods that can be used in character objects do not work 1:1 in formula objects...

Many thanks and best wishes
Christoph



--
Dr. rer.nat. Christoph Scherber
University of Goettingen
DNPW, Agroecology
Waldweg 26
D-37073 Goettingen
Germany

phone +49 (0)551 39 8807
fax   +49 (0)551 39 8806

Homepage http://www.gwdg.de/~cscherb1

______________________________________________
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.

.


--
Dr. rer.nat. Christoph Scherber
University of Goettingen
DNPW, Agroecology
Waldweg 26
D-37073 Goettingen
Germany

phone +49 (0)551 39 8807
fax   +49 (0)551 39 8806

Homepage http://www.gwdg.de/~cscherb1

______________________________________________
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.

Reply via email to