[R] extract printed value from a function

Martin Maechler maechler at stat.math.ethz.ch
Thu Feb 24 16:51:21 CET 2011


>>>>> "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



More information about the R-help mailing list