[R] (Newbie) scope of with()

Gabor Grothendieck ggrothendieck at myway.com
Thu Jul 15 14:15:12 CEST 2004


You could copy them back out at the end of your with like this:

   data(iris) # fetch test data
   with(iris, {
      Sepal.Length[Sepal.Length > 5] <- 5
      Sepal.Width <- Sepal.Width + 10
      for(n in names(iris)) iris[n] <<- get(n)
   } )

Antonio Prioglio <a.prioglio <at> city.ac.uk> writes:

: 
: Hi list,
: As I understand statements within with() are local to what is enclosed 
: within its expression.
: 
: As some excellent examples given to me previously have illustrated it is 
: nevertheless possible to assign the evaluation of an expression to an 
: external variable like x <- with(data, if(..))
: 
: During a "normalisation" phase of data read from a database I have a long 
: list of statements of the type
: participant$longfieldname[is.na(participant$longfieldname)]<-expr(...)
: or similar that makes cumbersome reading. (participant is a table of 
: demographic data)
: 
: If there a neat way to do something of the sort
: "participant<-with(participant,{...})"
: 
: it would make nicer reading.
: 
: Apparently attach(), detach() would not do as
: fieldname<-expr(fieldname)
: creates a new variable and not a change to the value of the field!
: 
: Saluti,
: Antonio Prioglio
:




More information about the R-help mailing list