[R] extract printed value from a function

Duarte Viana viana.sptd at gmail.com
Thu Feb 24 18:58:11 CET 2011


Let me first thank you all for the replies.

Actually I also tried the print() function, and indeed it did not
work. The function capture.output() Peter said did the job.

Thank you for sending the proposition for the new code to the maintainer.

Duarte



On Thu, Feb 24, 2011 at 4:51 PM, Martin Maechler
<maechler at stat.math.ethz.ch> wrote:
>>>>>> "PE" == Peter Ehlers <ehlers at ucalgary.ca>
>>>>>>     on Thu, 24 Feb 2011 07:07:29 -0800 writes:
>
>    PE> On 2011-02-24 06:32, David Winsemius wrote:
>    >>
>    >> On Feb 24, 2011, at 7:22 AM, Peter Ehlers wrote:
>    >>
>    >>> On 2011-02-24 03:26, Duarte Viana wrote:
>    >>>> Hello all,
>    >>>>
>    >>>> This shouldn't be difficult, but I am not able to extract a
>    >>>> printed value from a function and assign it to an object.
>    >>>>
>    >>>> In my case,
>    >>>>
>    >>>>> library(DAAG)
>    >>>>> twotPermutation(c(2,3,4),c(3,6,5),plotit=F)
>    >>>> [1] 0.298
>    >>>>
>    >>>> I would like to assign this result to an object.
>    >>
>    >> A third suggestion which has virtues of simplicity and keeping
>    >> the result "numeric":
>    >>
>    >> x<- print( twotPermutation(c(2,3,4),c(3,6,5),plotit=F) )
>
>    PE> Does that work? Not for me.
>    >>
>    >> >  x
>    >> [1] 0.1
>
>    PE> This may be some 'other' x. DAAG's twotPermutation() has an
>    PE> explicit
>
>    PE> print(signif(pval, 3))
>
>    PE> as its penultimate statement, followed by
>
>    PE> invisible()
>
>    PE> I don't know what, if any, advantage this code has over simply
>    PE> returning
>
>    PE> invisible(signif(pval, 3))
>
> Indeed!
> Your proposition is definitely better than the current  code.
>
> Even better would be to separate computation  and printing
> completely, and that would even involve the rounding step,
> i.e. a "decent"   twotPermutation() function would return an
> interesting object of class, say "twotPerm" (with the unrounded 'pval')
> which has its simple
>            print.twotPerm <- function(x, ...) { ... }
> method.
>
> Martin
>
>    PE> Peter Ehlers
>
>    >> >  x<- print(invisible (0.2))
>    >> [1] 0.2
>    >> >  x
>    >> [1] 0.2
>    >>
>    >> --
>    >>
>    >>
>    >>>
>    >>> Two suggestions:
>    >>> 1.
>    >>> Modify the code for twotPermutation by removing the
>    >>> invisible() at the end.
>    >>>
>    >>> 2.
>    >>> Use capture.output to capture the result and then convert to
>    >>> numeric:
>    >>>
>    >>> pvstring<- capture.output( twotPermutation( c(2,3,4),
>    >>> c(3,6,5), plotit=FALSE) ))
>    >>>
>    >>> Now you can use strsplit or substr to extract the numeric
>    >>> part:
>    >>>
>    >>> pv<- as.numeric(strsplit(pvstring, " ")[[1]][2])
>    >>>
>    >>> or
>    >>>
>    >>> pv<- as.numeric( substr(pvstring, nchar(pvstring) - 5,
>    >>> nchar(pvstring)))
>    >>>
>    >>> Peter Ehlers
>    >>>
>    >>>>
>    >>>> Thanks,
>    >>>>
>    >>>> Duarte
>
> ______________________________________________
> 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.
>



More information about the R-help mailing list