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.