[R] replacing characters in formulae / models

Keith Jewell k.jewell at campden.co.uk
Thu Nov 6 17:37:58 CET 2008


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" <Christoph.Scherber at agr.uni-goettingen.de> wrote in 
message news:4913125C.2060500 at agr.uni-goettingen.de...
> 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



More information about the R-help mailing list