[R] Using a mathematical expression in sapply() XXXX

peter dalgaard pdalgd at gmail.com
Wed Jan 4 15:17:00 CET 2012


On Jan 4, 2012, at 14:57 , Milan Bouchet-Valat wrote:

> Le mercredi 04 janvier 2012 à 08:41 -0500, Dan Abner a écrit :
>> Hello everyone,
>> 
>> I have the following call to sapply() and error message. Is the most
>> efficient way to deal with this to make sum(!is.na(x)) a function in a
>> separate line prior to this call? If not, please advise.
>> 
>> N.Valid=sapply(x,sum(!is.na(x)))
>> Error in match.fun(FUN) :
>>  'sum(!is.na(x))' is not a function, character or symbol
> You can use this:
> sapply(x, function(x) sum(!is.na(x)))
> 
> But, if you can convert x to a matrix, it would be faster and shorter to
> check for NAs beforehand, and use apply():
> x <- matrix(c(1, 2, NA, 3, NA, 4), 2)
> apply(!is.na(x), 2, sum)

Just for completeness: You might also do

sapply(lapply(x, is.na), sum)

I suspect that the anonymous function approach is more efficient, though (if you really need those extra milliseconds of your life).

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