[R] extract printed value from a function

Keith Jewell k.jewell at campden.co.uk
Thu Feb 24 16:14:13 CET 2011


I don't think that third suggestion actually works:
>  x <- print( twotPermutation(c(2,3,4),c(3,6,5),plotit=F) )
[1] 0.289
NULL
> x
NULL

 twotPermutation returns the value of invisible() which is NULL:
x <- print(invisible())
x

This conflicts with the documented behaviour of twotPermutation which states 
that it should return the p-value ("Value: The p-value for the test of the 
hypothesis that the mean of x1 differs from x2") and makes no mention of 
returning it invisibly, or printing the value when it is returned. I suggest 
that the function is in error and should be corrected by replacing the final 
two lines
---------------
    print(signif(pval, 3))
    invisible()
-------------
with simply
--------------
    signif(pval, 3)
-------------
Relying on the default behaviour of R to print the value when it is not 
assigned. I will copy this suggestion to the listed maintainer (W. John 
Braun braun at stats.uwo.ca)



"David Winsemius" <dwinsemius at comcast.net> wrote in message 
news:53D4D49F-F8E1-44C0-B663-8B24D8420F0D at comcast.net...
>
> 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) )
>
> > x
> [1] 0.1
> > 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