[R] How to see how a function is written

Sergey Goriatchev sergeyg at gmail.com
Tue Jun 15 15:10:18 CEST 2010


> showMethods("apply")
Function: apply (package base)
X="ANY"
X="missing"
    (inherited from: X="ANY")
X="timeSeries"

On Tue, Jun 15, 2010 at 15:10, Gavin Simpson <gavin.simpson at ucl.ac.uk> wrote:
> On Tue, 2010-06-15 at 14:56 +0200, Sergey Goriatchev wrote:
>> Maybe I have to much stuff loaded in the workspace, Gavin, you are right:
>
> OK, so now do
>
> showMethods("apply")
>
> And R should list out the available methods. See which package
> (re)defines apply.
>
> But it is likely going to be simpler to start a clean session and look
> at the code in there. If you need the S4 method/generic code then you'll
> have to find out which package is redefining apply and look in the
> sources for that package.
>
> HTH
>
> G
>
>> > sessionInfo()
>> R version 2.10.1 (2009-12-14)
>> i386-pc-mingw32
>>
>> locale:
>> [1] LC_COLLATE=German_Switzerland.1252
>> LC_CTYPE=German_Switzerland.1252
>> LC_MONETARY=German_Switzerland.1252
>> [4] LC_NUMERIC=C                        LC_TIME=German_Switzerland.1252
>>
>> attached base packages:
>> [1] stats     graphics  grDevices utils     datasets  methods   base
>>
>> other attached packages:
>>  [1] PerformanceAnalytics_1.0.0 quantmod_0.3-13            TTR_0.20-1
>>                Defaults_1.1-1             xts_0.7-0
>>  [6] fPortfolio_2100.78         Rglpk_0.3-5                slam_0.1-9
>>                fAssets_2100.78            fCopulae_2110.78
>> [11] sn_0.4-14                  mnormt_1.3-3
>> fBasics_2110.79            timeSeries_2110.87         timeDate_2110.87
>> [16] robustbase_0.5-0-1         quadprog_1.4-12            MASS_7.3-5
>>                fEcofin_290.76             foreach_1.3.0
>> [21] codetools_0.2-2            iterators_1.0.3            zoo_1.6-3
>>
>> loaded via a namespace (and not attached):
>> [1] grid_2.10.1    lattice_0.18-3 tools_2.10.1
>>
>>
>> On Tue, Jun 15, 2010 at 14:56, Gavin Simpson <gavin.simpson at ucl.ac.uk> wrote:
>> > On Tue, 2010-06-15 at 14:38 +0200, Sergey Goriatchev wrote:
>> >> Erik, I see the following when I type "apply" at the prompt:
>> >>
>> >> > apply
>> >> standardGeneric for "apply" defined from package "base"
>> >
>> > Looks like you have something loaded in your workspace (or have created
>> > something) that has altered the usual definition of apply(). Most likely
>> > is a package has made the base apply() function an S4 method.
>> >
>> > Send the output of sessionInfo() to the list so we can help if you
>> > interest is in the S4 method version of apply() (myself I'm not too
>> > familiar with S4 methods just yet).
>> >
>> > If you start R in a clean session, you should see the normal definition
>> > of apply
>> >
>> > R --vanilla
>> > apply
>> >
>> > On Windows you may need to add that option to the shortcut you use to
>> > start R.
>> >
>> > You could also try
>> >
>> > base:::apply
>> >
>> > to see the version in the base R namespace (at least I think that should
>> > work).
>> >
>> >>
>> >> function (X, MARGIN, FUN, ...)
>> >> standardGeneric("apply")
>> >> <environment: 0x03cad7d0>
>> >> Methods may be defined for arguments: X, MARGIN, FUN
>> >> Use  showMethods("apply")  for currently available ones.
>> >>
>> >> Also, whether I type "mean" at the prompt, or I type "edit(mean)", I
>> >> do not see the underlying code for function "mean". How would I be
>> >> able to see it?
>> >
>> > The info I sent in my previous email should help you with the mean
>> > function --- as long as that hasn't been overwritten by anything.
>> >
>> >> methods(mean)
>> > [1] mean.data.frame mean.Date       mean.default    mean.difftime
>> > [5] mean.POSIXct    mean.POSIXlt
>> >> getS3method("mean", "default")
>> > function (x, trim = 0, na.rm = FALSE, ...)
>> > {
>> >    if (!is.numeric(x) && !is.complex(x) && !is.logical(x)) {
>> >        warning("argument is not numeric or logical: returning NA")
>> >        return(NA_real_)
>> >    }
>> >    if (na.rm)
>> >        x <- x[!is.na(x)]
>> >    if (!is.numeric(trim) || length(trim) != 1L)
>> >        stop("'trim' must be numeric of length one")
>> >    n <- length(x)
>> >    if (trim > 0 && n) {
>> >        if (is.complex(x))
>> >            stop("trimmed means are not defined for complex data")
>> >        if (any(is.na(x)))
>> >            return(NA_real_)
>> >        if (trim >= 0.5)
>> >            return(stats::median(x, na.rm = FALSE))
>> >        lo <- floor(n * trim) + 1
>> >        hi <- n + 1 - lo
>> >        x <- sort.int(x, partial = unique(c(lo, hi)))[lo:hi]
>> >    }
>> >    .Internal(mean(x))
>> > }
>> > <environment: namespace:base>
>> >
>> > Although here, none of the mean methods are hidden so you could just
>> > type their names directly.
>> >
>> > The meaning of the .Internal(   ) bit is that this calls internal C
>> > code. Uwe Ligges article discusses what to do at this point.
>> >
>> > HTH
>> >
>> > G
>> >
>> >>
>> >> ---
>> >> My machine:
>> >> platform       i386-pc-mingw32
>> >> arch           i386
>> >> os             mingw32
>> >> system         i386, mingw32
>> >> status
>> >> major          2
>> >> minor          10.1
>> >> year           2009
>> >> month          12
>> >> day            14
>> >> svn rev        50720
>> >> language       R
>> >> version.string R version 2.10.1 (2009-12-14)
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> On Tue, Jun 15, 2010 at 14:26, Erik Iverson <eriki at ccbr.umn.edu> wrote:
>> >> > Sergey Goriatchev wrote:
>> >> >>
>> >> >> Hello,
>> >> >>
>> >> >> If I want to see how, say, apply function is written, how would I be
>> >> >> able to do that?
>> >> >> Just typing "apply" at the prompt does not work.
>> >> >>
>> >> >
>> >> > Well, it is supposed to work, and it works for me.  So you need to tell us
>> >> > what "does not work" means, and all the info the posting guide requests, OS,
>> >> > versions, etc.
>> >> >
>> >>
>> >>
>> >>
>> >
>> > --
>> > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
>> >  Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
>> >  ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
>> >  Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
>> >  Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
>> >  UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
>> > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
>> >
>> >
>>
>>
>>
>
> --
> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
>  Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
>  ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
>  Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
>  Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
>  UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
>
>



-- 
Famous Oxymorons:

Jobless Recovery
Jumbo Shrimp
War Game
Wedding Party
Genuine Replica
Toxic Assets
Italian Government
Feminine Logic
Amicable Divorce
Military Intelligence
Money Multiplier
Fiscal Conservative
Abundant Poverty
Educated Investor
Government Worker
Green Shoots
Hope and Change
Change you can believe in
Becky Quick



More information about the R-help mailing list