[Rcpp-devel] How to pf from Rcpp

Hao Xiong hao at biostat.ucsf.edu
Sat Nov 12 21:47:18 CET 2011


Thank you, Dirk and Douglas. You both provided the answers I need.

On 11/12/2011 12:05 PM, Dirk Eddelbuettel wrote:
> On 12 November 2011 at 08:58, Douglas Bates wrote:
> | Check the declarations in the include file
> |
> | Rmath.h
> |
> | The function must be called as Rf_pf in Rcpp and has the signature
> |
> | double Rf_pf(double x, double df1, double df2, int lower_tail, int log_p)
> |
> | On Sat, Nov 12, 2011 at 1:09 AM, Hao Xiong<hao at biostat.ucsf.edu>  wrote:
> |>  Hi,
> |>
> |>  I need to use pf() from Rcpp but I couldn't seem to find out how.
> |>
> |>  For example, the code looks like this:
> |>
> |>  #include<Rcpp.h>
> |>  ...
> |>    Rcpp::pf(1.2, 5, 2);
> |>  ...
> |>  The compiler couldn't find pf(). I also tried all arguments as doubles,
> |>  but no go.
> |>
> |>  I also would like to computer the upper tail probability but again
> |>  I don't know the exact function signature, so I plan to just use 1-pf(...).
>
> Beside Doug's tip of falling back to the C API of R, we also have "R sugar"
> variants. However these mimic how the R functions are implemented, rather
> than than the APIthey provide --- and more important 'pf' actually becomes
> 'pnf' because what we usually want as 'f' is the non-central f, ie f with
> argument ncp=0:
>
>
> R>  suppressMessages(library(inline))
> R>  suppressMessages(library(Rcpp))
> R>
> R>  fun<- cxxfunction(signature(x_="numeric", df_="numeric"), body='
> +    NumericVector x(x_);
> +    NumericVector df(df_);
> +    NumericVector res = pnf(x, df(0), df(1), 0, 1);
> +    return(wrap(res));
> + ',plugin="Rcpp")
> R>
> R>
> R>  fun(1:3, c(6,8))                ## our function
> [1] 0.514760 0.820800 0.923255
> R>
> R>  pf(1:3, 6, 8)                   ## equivalent R call
> [1] 0.514760 0.820800 0.923255
> R>
> R>  pf(1:3, 6, 8, 0)                ## idem with ncp=0
> [1] 0.514760 0.820800 0.923255
> R>
>
> The nice things is that the sugar version vectorised. The not so nice thing
> is that you _must_ supply the extra arguments for lower tail and log.
Can you tell me in which file is pnf() declared? It would help me later 
when I need
to look up similar functions for other distributions.

Thanks for answering my question. Rcpp has been a God-sent for me.

Hao

> Dirk
>
>
> |>
> |>  Thanks for your help.
> |>  Hao
> |>  _______________________________________________
> |>  Rcpp-devel mailing list
> |>  Rcpp-devel at lists.r-forge.r-project.org
> |>  https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
> |>
> | _______________________________________________
> | Rcpp-devel mailing list
> | Rcpp-devel at lists.r-forge.r-project.org
> | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>



More information about the Rcpp-devel mailing list