[R] Use of parantheses to force order of execution

peter dalgaard pdalgd at gmail.com
Sun Sep 8 16:39:25 CEST 2013


On Sep 8, 2013, at 16:09 , Duncan Murdoch wrote:

> On 13-09-08 6:46 AM, Ben Harrison wrote:
>> Hello,
>> I wish to create a copy of a data frame, but with missing values replaced
>> with NAs.
>> 
>> I thought I should be able to do it in one step using parentheses to group
>> the statements and force those inside the parens to execute first:
>> 
>> df <- (BWS6[BWS6 < -998] <- NA)
>> 
>> But all this does is assign NA to df, as described in ?"[" for the case
>> with no parens.
>> 
>> Can I do this in some way? It's no great problem of course to have two
>> separate statements, just curious.
> 
> This isn't an order of execution issue.  Your parenthesized assignment modifies BWS6, and that's not what you want to do.

Also, the value of an assignment is always the right hand side, in this case NA.

The canonical way would be --- but There be Tygers There! --- this: 

df <- `[<-`(BWS6, BWS6 < -998, NA)

The "Tygers" are that R sometimes cheats in order to avoid duplication and assumes that `[<-` can destructively modify its argument. So you shouldn't actually do the above.

- Peter D. 

> 
> If you convert BWS6 to a matrix instead of a dataframe, you could use
> 
> res <- ifelse(BWS6 < -998, NA, BWS6)
> 
> but ifelse doesn't work on dataframes in general.  You can do it in one long line with a dataframe using lapply, but it is ugly:
> 
> df <- as.data.frame( lapply(BWS6, function(col) ifelse(col < -998, NA, col)))
> 
> Duncan Murdoch
> 
> ______________________________________________
> R-help at 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.

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com



More information about the R-help mailing list