| 389 | // for REALSXP |
| 390 | template< typename InputIterator > |
| 391 | typename traits::enable_if< helpers::decays_to_ctype< typename std::iterator_traits< InputIterator >::value_type >::value |
| 392 | && traits::same_type< typename helpers::ctype< typename std::iterator_traits< InputIterator >::value_type >::type, double >::value, double >::type |
| 393 | mean(InputIterator begin, InputIterator end) |
| 394 | { |
| 395 | if (begin != end) |
| 396 | { |
| 397 | std::size_t n = end - begin; |
| 398 | long double s = std::accumulate(begin, end, 0.0L); |
| 399 | s /= n; |
| 400 | |
| 401 | if (R_FINITE((double) s)) { |
| 402 | long double t = 0.0L; |
| 403 | while (begin != end) { |
| 404 | t += *begin++ - s; |
| 405 | } |
| 406 | |
| 407 | s += t / n; |
| 408 | } |
| 409 | |
| 410 | return (double) s; |
| 411 | } |
| 412 | |
| 413 | return helpers::rtype< double >::NA(); |
| 414 | } |
| 415 | |
| 416 | // for LGLSXP and INTSXP |
| 417 | template< typename InputIterator > |
no outgoing calls
no test coverage detected