Rcpp Version 0.10.3
Main Page
Namespaces
Classes
Files
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerator
Friends
Macros
rf.h
Go to the documentation of this file.
1
// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 4 -*-
2
//
3
// rf.h: Rcpp R/C++ interface class library --
4
//
5
// Copyright (C) 2010 - 2012 Douglas Bates, Dirk Eddelbuettel and Romain Francois
6
//
7
// This file is part of Rcpp.
8
//
9
// Rcpp is free software: you can redistribute it and/or modify it
10
// under the terms of the GNU General Public License as published by
11
// the Free Software Foundation, either version 2 of the License, or
12
// (at your option) any later version.
13
//
14
// Rcpp is distributed in the hope that it will be useful, but
15
// WITHOUT ANY WARRANTY; without even the implied warranty of
16
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
// GNU General Public License for more details.
18
//
19
// You should have received a copy of the GNU General Public License
20
// along with Rcpp. If not, see <http://www.gnu.org/licenses/>.
21
22
#ifndef Rcpp__stats__random_rf_h
23
#define Rcpp__stats__random_rf_h
24
25
namespace
Rcpp {
26
namespace
stats {
27
28
29
class
FGenerator_Finite_Finite
:
public
::Rcpp::Generator
<double> {
30
public
:
31
32
FGenerator_Finite_Finite
(
double
n1_,
double
n2_ ) :
33
n1
(n1_),
n2
(n2_),
n1__2
(n1_ / 2.0 ),
n2__2
(n2_ / 2.0 ),
ratio
(n2_/n1_) {}
34
35
inline
double
operator()
()
const
{
36
// here we know that both n1 and n2 are finite
37
// return ( ::rchisq( n1 ) / n1 ) / ( ::rchisq( n2 ) / n2 );
38
return
ratio
* ::Rf_rgamma(
n1__2
, 2.0 ) / ::Rf_rgamma(
n2__2
, 2.0 ) ;
39
}
40
41
private
:
42
double
n1
,
n2
,
n1__2
,
n2__2
,
ratio
;
43
} ;
44
45
46
class
FGenerator_NotFinite_Finite
:
public
::Rcpp::Generator
<double> {
47
public
:
48
49
FGenerator_NotFinite_Finite
(
double
n2_ ) :
n2
( n2_),
n2__2
(n2_ / 2.0 ) {}
50
51
inline
double
operator()
()
const
{
52
// return n2 / ::rchisq( n2 ) ;
53
return
n2
/ ::Rf_rgamma(
n2__2
, 2.0 ) ;
54
}
55
56
private
:
57
double
n2
,
n2__2
;
58
} ;
59
60
61
class
FGenerator_Finite_NotFinite
:
public
::Rcpp::Generator
<double> {
62
public
:
63
64
FGenerator_Finite_NotFinite
(
double
n1_ ) :
n1
(n1_),
n1__2
(n1_ / 2.0 ) {}
65
66
inline
double
operator()
()
const
{
67
// return ::rchisq( n1 ) / n1 ;
68
return ::Rf_rgamma(
n1__2
, 2.0 ) /
n1
;
69
}
70
71
private
:
72
double
n1
,
n1__2
;
73
} ;
74
75
}
// stats
76
77
}
// Rcpp
78
79
#endif
inst
include
Rcpp
stats
random
rf.h
Generated on Sat Mar 23 2013 11:26:08 for Rcpp Version 0.10.3 by
1.8.1.2